我的代码看起来像
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)。有没有办法定义调用以便它工作?
(输出和调用都更复杂——这是一个用于提出问题的简化版本。不,当我调用调用时涉及知道 int 的解决方案没有帮助。)