![](/img/trans.png)
[英]Template setter setting a value of an unknown type. can I have a non template getter for this value?
[英]C++ unknown variable type. Should I use template?
我正在嘗試創建一個類,該類將解析C ++中的文件。 但是,該文件實際上位於2個文件中,即標頭和原始數據。
標頭包含原始數據的數據類型(可以是int,double,float等)。 我想在我的班級中創建一個變量來存儲原始數據。 無論數據類型如何,處理都是一樣的。
我應該使用模板來執行此操作嗎? 僅對1個變量使用模板化類是不是矯kill過正?
謝謝。
使用函數重載呢? 您說處理是一樣的,所以...我想可以。 有時我會用它們來做這種事情。
例:
標頭
class MyClass {
public:
void function(int x);
void function(double x);
void function(string x);
void function(char x);
};
編譯器將知道要使用的功能,具體取決於您要發送(傳遞)給它的值。
模板當然可以在這里為您提供幫助。 它們提供了一種減少重復處理的方法,您說對於所有類型都是相同的。
當然,是否“應該”使用它們是一個更困難的問題,是否過高也是如此-兩者都是意見問題,但是通常的使用表明僅使用一個變量將不會成為決定該問題的因素。
如果需要將包含不同類型的文件的內容處理到同一容器中,或者一個文件可以包含多個類型,那么boost變體可能會更合適。
由於您是從文件中讀取類型的,因此這些類型在運行時是已知的,但是由於選項列表在編譯時是已知的,因此您可以檢查文件中的類型並傳遞該類型。
if(typeFromFile == headerValueForint)
{
processFile<int>();
}
else if (typeFromFile == headerValueFordouble)
{
processFile<double>();
}
但是,由於您列出的所有類型都是數字類型(並且我想知道如果存在其他任何非數字類型,處理的方式實際上是一樣的),您可以決定將所有值都讀為雙精度-進行適當的范圍檢查。 它可能占用更多的內存,但是其影響取決於處理實際涉及的內容。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.