1
說我有一個整型模板參數的類。我將如何去添加一個函數,該函數需要給定類型的參數N
?如果可能的話,我想避免enable_if
等等。函數自變量的數量等於模板整數
我目前做的是:
template<unsigned int N>
class Foo
{
template <typename To, typename>
using to = To;
public:
template<typename... Args>
void Bar(to<char, Args>... args) // Some arguments of type char
{ /* do stuff */ }
};
這允許調用酒吧:
Foo<3> myfoo;
myfoo.Bar<int, int, int>('a', 'b', 'c');
但是,我看到兩個缺點。首先,參數的數量不一定限於N
,除非可能代碼在Bar
之內。
其次,用戶需要爲該函數添加模板參數。它們的值實際上並不使用,只有參數的數量。這似乎是不必要的,因爲我們已經有這個,即N
。
的最佳使用功能是這樣的:
Foo<3> myfoo;
myfoo.Bar('a', 'b', 'c'); // valid
以下呼叫產生編譯錯誤。 function does not take this many arguments
,或者你會得到的一些類似的標準編譯錯誤,如果你手動定義void(char, char, char)
。
myfoo.Bar('a', 'b');
myfoo.Bar('a', 'b', 'c', 'd'); // error
myfoo.Bar('a', 'b', "flob"); // error
// ...
我正要發佈這個...... Dammit:D – Quentin
你可能會解釋什麼'class ='在第一個模板中做? –
這是爲第二個模板參數標記默認值。使用這個你不會用兩個參數調用Foo。 –