gpt4 book ai didi

c++ - 将模板函数传递给模板函数

转载 作者:行者123 更新时间:2023-11-30 01:33:56 26 4
gpt4 key购买 nike

这个片段可能吗?我找不到正确的语法来允许模板的模板

// Example program
#include <iostream>

template<typename T>
void print_value()
{
T t;
std::cout << t << std::endl;
}

template<typename DO>
void dispatch_do()
{
DO<int>();
DO<float>();
}

int main()
{
dispatch_do<print_value>();
return 0;
}

最佳答案

print_value 不是类型,因此您不能将它传递给接受 typename 的模板。最简单的替代方法是传递 lambda - C++20 解决方案:

template <typename T>
void print_value()
{
T t;
// ...
}

template <typename F>
void dispatch_do(F&& f)
{
f.template operator()<int>();
f.template operator()<float>();
}

int main()
{
dispatch_do([]<typename T>(){ print_value<T>(); });
return 0;
}

live example on godbolt.org


C++14 解决方案:

template <typename T>
struct type_wrapper { using type = T; };

template <typename F>
void dispatch_do(F&& f)
{
f(type_wrapper<int>{});
f(type_wrapper<float>{});
}

int main()
{
dispatch_do([](auto x){ print_value<typename decltype(x)::type>(); });
return 0;
}

live example on godbolt.org

关于c++ - 将模板函数传递给模板函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57255547/

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