我的代码看起来像
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
(输出和调用都更复杂——这是用于提问的简化版本。不,涉及在我调用调用时了解 int 的解决方案没有帮助。)
最佳答案
你不能做这样的事。在调用 invoke
之前,您应该知道自己想要做什么。像这样的东西会很好用
void invoke(const std::function<void()>& func)
{
func();
}
template<typename T>
void output (const T& val)
{
std::cout << val << std::endl;
}
if (rand() % 2)
{
invoke(std::bind<void(&)(const int&)>(&output, globals::value_calculated));
}
else
{
invoke(std::bind<void(&)(const char&)>(&output, globals::value));
}
lws 的完整示例:http://liveworkspace.org/code/1uLIr4 $0
关于c++ - 模板化函数作为参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15757974/