这段话有可能吗?我找不到允许模板模板的正确语法
// 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;
}发布于 2019-07-29 14:14:31
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;
}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;
}https://stackoverflow.com/questions/57255547
复制相似问题