是否有可能有一個C++模板函數可以訪問輸入數據中的不同字段,具體取決於輸入數據的類型是否傳遞給它?C++模板函數僅使用某些數據類型中的字段?
例如我有這樣的代碼:
typedef struct
{
int a;
int b;
}s1;
typedef struct
{
int a;
}s2;
template <class VTI_type> void myfunc(VTI_type VRI_data, bool contains_b)
{
printf("%d", VRI_data.a);
if(contains_b) // or suggest your own test here
printf("%d", VRI_data.b); // this line won't compile if VTI_type is s2, even though s2.b is never accessed
}
void main()
{
s1 data1;
data1.a = 1;
data1.b = 2;
myfunc <s1> (data1, true);
s2 data2;
data2.a = 1;
myfunc <s2> (data2, false);
}
所以我們想要使用來自許多不同數據類型的字段A,並且工作正常。
但是,某些數據還有一個需要使用的字段B,但是如果模板知道它正在查看不包含字段B的數據類型,則需要刪除訪問字段B的代碼。
(在我的例子,該結構是外部API的一部分,因此不能改變)
這個問題似乎是,是有可能做一個編譯時檢查,以一個類型是否有特定名稱的成員變量。我認爲答案是否定的。你*可以*使用SFINAE來完成會員類型。 – 2009-07-17 13:04:23
你有沒有第二個領域的很多結構?爲他們提供模板專業化是否可行? – jalf 2009-07-17 13:04:39