繁体   English   中英

模板化函数作为参数

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM