gpt4 book ai didi

c++ - 模板化函数作为参数

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:57:42 26 4
gpt4 key购买 nike

我的代码看起来像

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() 或 invoke(output)。有没有一种方法可以定义调用以使其有效?

(输出和调用都更复杂——这是用于提问的简化版本。不,涉及在我调用调用时了解 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com