この単純で無意味なコードを考えてみてください。
#include <iostream>
struct A {
template<int N>
void test() {
std::cout << N << std::endl;
}
};
int main() {
A a;
a.test<1>();
}
関数テンプレートの非常に単純な例です。A::test
しかし、オーバーロードされたものに置き換えてoperator()
ファンクタにしたい場合はどうすればよいでしょうか?
#include <iostream>
struct A {
template<int N>
void operator()() {
std::cout << N << std::endl;
}
};
int main() {
A a;
a<1>(); // <-- error, how do I do this?
}
確かoperator()
に、テンプレートに依存するパラメーターを受け取った場合、コンパイラーはテンプレートを推定する可能性があります。しかし、パラメーターなしのファンクターでテンプレート パラメーターを指定する適切な構文がわかりません。
これを行う適切な方法はありますか?
明らかに、このコードはファンクター構文をバイパスするため機能します。
a.operator()<1>();
しかし、それはそれがファンクターであるという目的をちょっと無効にします:-P.