[英]Templated function as parameter
我有看起来像的代码
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的解决方案没有帮助。)
你不能做这样的事情。 在调用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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.