このシンプルで無意味なコードを考えてみましょう。C++ファンクタと関数テンプレート
#include <iostream>
struct A {
template<int N>
void test() {
std::cout << N << std::endl;
}
};
int main() {
A a;
a.test<1>();
}
非常に簡単な関数テンプレートの例です。しかし、A::test
をオーバーロードされたoperator()
に置き換えて、それをファンクタにする場合はどうすればいいですか? 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?
}
確かに、コンパイラはおそらくテンプレートを導き出すことができます。しかし、パラメータのないファンクタでテンプレートパラメータを指定するための適切な構文を理解できません。
これを行う適切な方法はありますか?
a.operator()<1>();
が、それはちょっと、それはファンクタ:-Pであることの目的に反し:それはファンクタの構文をバイパスするので
明らかに、このコードは動作します。
a.operator()<1>();
構文:
+1:コード難読化で使用するための奇妙な構文。 http://thc.org/root/phun/unmaintain.htmlに記載する必要があります:-) –