次のようなコードがあります
template<typename C>
void invoke() {
if (thing_known_at_runtime) {
C::template run<int>(4);
} else {
C::template run<char>('a');
}
}
struct output {
template<typename T>
static void run(T x) {
cout << x;
}
};
invoke<output>();
そして、それは機能します。
しかし、出力の重い定義は好きではありません。私は書くことができるようになりたいです:
template<typename T>
void output(T x) {
cout << x;
}
そして、invoke<output>() または invoke(output) を呼び出します。これが機能するように呼び出しを定義する方法はありますか?
(出力と呼び出しの両方がより複雑です。これは、質問をするための簡略化されたバージョンです。いいえ、invoke を呼び出すときに int を知っていることを含む解決策は役に立ちません。)