首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将模板函数传递给模板函数

将模板函数传递给模板函数
EN

Stack Overflow用户
提问于 2019-07-29 14:04:50
回答 1查看 81关注 0票数 1

这段话有可能吗?我找不到允许模板模板的正确语法

代码语言:javascript
复制
// 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;
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-07-29 14:14:31

print_value不是一种类型,因此不能将它传递给接受typename的模板。最简单的选择是传递一个lambda - C++20解决方案:

代码语言:javascript
复制
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解决方案:

代码语言:javascript
复制
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

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57255547

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档