因为可以使用“模板模板”语法命名模板化类,并且因为可以使用“函数指针”语法命名函数,所以我想知道是否存在在模板中命名函数的语法(或提议)没有指定模板.
template<typename t_type>struct A { t_type value;};template<template<typename> class t_type>struct B { t_type<int> value;};template<int added>constexpr int C (int value) { return value + added;}template<int (*function)(int)>constexpr int D (int value) { return function(value);}// GOAL: Template argument referring to templated function/*template<template<int> int (*function)(int)>constexpr int E (int value) { return function<1>(value);}*/int main() { B<A> tt_good; int fp_good = D< &C<1> >(0); /*int fp_fail = E< &C >(0);*/ return 0;}
对于对此功能感兴趣的任何人,可以首先使用名为(例如)“method”的调用方法将结构中的函数D包装起来,将结构作为“模板模板”参数传递给E,然后调用“方法“在E.
我不喜欢这种方法的原因是它需要一个可能以这种方式使用的每个可变函数的包装器结构.
解决方法 遗憾的是,您无法将函数模板作为模板参数传递.最接近的是使用通用仿函数:#include <iostream>template <typename F>voID call(F f){ f("hello,world\n");}int main(){ call([](auto value) { std::cout << value; });}
如果你没有C 14通用lambdas,你可以手工编写自己的仿函数:
#include <iostream>template <typename F>voID call(F f){ f("hello,world\n");}struct print{ template <typename T> voID operator()(T value) const { std::cout << value; }};int main(){ call(print());}总结
以上是内存溢出为你收集整理的c – 参考模板中的模板化函数全部内容,希望文章能够帮你解决c – 参考模板中的模板化函数所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)