<> - 将此作为模板阅读;
我可以这样做:
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;
}
BIG Q是:如何(如果可能)我可以将模板参数声明为fnc模板?
修改
假设我使用了Armen的建议: 我希望能够做到这样的事情(主要):
Factor<f<"1","02">> m;
然后在m我可以用那些args(“1”,“02”)制作双重类型
答案 0 :(得分:1)
在C ++中没有这种语法。 你应该做的不是函数模板使用函子模板,它适合作为模板模板参数。
E.G。
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;
}
答案 1 :(得分:1)
您的语法有一些问题。最后您使用Factor<make_> fac;
执行的操作类似于声明vector<map> v;
您需要为模板提供参数以使其具体:Factor<make_<int,int> > fac;
。但这不是整个问题;有很多。
你正在做的功能不太对劲。您正在提供特定功能(第一个示例中的f),可以作为构造函数参数完成。你应该重新评估你的设计。
答案 2 :(得分:0)
通过查看您的make_()
功能模板,您实际想要的似乎是boost::lexical_cast<>()
。它完成了make_()
所做的事情,只做得更好。 (对于初学者,您的转换根本不会检查错误。)