テンプレートパラメータを関数パラメータとして使用せずにvariadicテンプレートを使用できますか?関数パラメータを持たないVariadicテンプレート
私はそれらを使用すると、それはコンパイル:
#include <iostream>
using namespace std;
template<class First>
void print(First first)
{
cout << 1 << endl;
}
template<class First, class ... Rest>
void print(First first, Rest ...rest)
{
cout << 1 << endl;
print<Rest...>(rest...);
}
int main()
{
print<int,int,int>(1,2,3);
}
をしかし、私はそれらを使用していないとき、それはコンパイルと曖昧に不満はありません:
#include <iostream>
using namespace std;
template<class First>
void print()
{
cout << 1 << endl;
}
template<class First, class ... Rest>
void print()
{
cout << 1 << endl;
print<Rest...>();
}
int main()
{
print<int,int,int>();
}
残念ながらクラスIテンプレートパラメータはインスタンス化できません(テンプレート関数の内部で呼び出される静的関数があります)。 これを行う方法はありますか?
'のstd :: declval()'。任意の 'T 'のために動作します。 –
なぜ引数なしのバージョンが機能しないのか:引数がなければ 'print'と 'print 'の両方が同じように良いですが、 'print (3)'の引数は 'print (3、{}) '(' {} 'は"何も意味しません ")。 CatPusPusが示唆するように、オーバーロードを使用しない方法が標準的な方法です。とにかくあなたの議論を推論していないので、最も簡単な解決策です。 –
私は答えを投稿するつもりでしたが、n.m.すでにそれを投稿しました。 – bames53