gpt4 book ai didi

c++ - 函数模板作为类模板的参数

转载 作者:行者123 更新时间:2023-11-30 04:37:12 26 4
gpt4 key购买 nike

<> - 将此作为模板阅读;

我能做到:

void f() {}

//Here I'm declaring a fnc as a <> param
template<void (*fnc)()>
struct Factor { };

int main()
{
Factor<f> fac;
return 0;
}

但我不能这样做:

#include <sstream>

template<class R, class T>
R make_(T first, T second)
{
std::stringstream interpreter;
R result = R();
interpreter << first << '.' << second;
interpreter >> result;
return result;
}

//Here I'm (trying) to declare fnc <> as a <> param
template<template<class T,class R> R (*fnc)(T,T)>
struct Factor { };

int main(int argc, char* argv[])
{
Factor<make_> fac;
return 0;
}

最大的问题是:如何(如果可能)将 fnc 模板声明为模板参数?

编辑

假设我使用了 Armen 的建议:我希望能够做这样的事情(主要):

Factor<f<"1","02">> m;

然后在 m 中,我可以从这些参数 ("1", "02") 中创建一个 double 类型

最佳答案

C++ 中没有相应的语法。你应该做的是使用仿函数模板代替函数模板,它适合作为模板模板参数。

例如

template <class R, class T>
struct f
{
R operator () (T const&)
{
//blah
}
};

template <template<class R, class T> class F >
struct foo
{
///...
};

int main()
{
foo<f> d;
}

关于c++ - 函数模板作为类模板的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4046442/

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