Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;使用关键字和参数包的模板函数 //我有一个这样的别名 样板 使用msg_formatter=string(常量string&,常量Args&…); //它是由这样的类返回的 类记录器{ 公众: msg_formatter*formatter()常量; }; //然后在别的地方我想把这个叫做 测井日志; log.formatter()(“我的文本:%d”,123);_C++_Templates - Fatal编程技术网

C++ C++;使用关键字和参数包的模板函数 //我有一个这样的别名 样板 使用msg_formatter=string(常量string&,常量Args&…); //它是由这样的类返回的 类记录器{ 公众: msg_formatter*formatter()常量; }; //然后在别的地方我想把这个叫做 测井日志; log.formatter()(“我的文本:%d”,123);

C++ C++;使用关键字和参数包的模板函数 //我有一个这样的别名 样板 使用msg_formatter=string(常量string&,常量Args&…); //它是由这样的类返回的 类记录器{ 公众: msg_formatter*formatter()常量; }; //然后在别的地方我想把这个叫做 测井日志; log.formatter()(“我的文本:%d”,123);,c++,templates,C++,Templates,但是这似乎不起作用,你知道吗? 非常感谢。由于msg\u formatter是一个模板,因此必须在返回类型中提供模板参数,但由于您不知道将传递的类型,因此需要另一个间接级别。如果您有C++14,则可以使用auto返回类型推断从函数返回lambda: // I have an alias like this template<typename ... Args> using msg_formatter = string(const string&, const Args &a

但是这似乎不起作用,你知道吗?
非常感谢。

由于
msg\u formatter
是一个模板,因此必须在返回类型中提供模板参数,但由于您不知道将传递的类型,因此需要另一个间接级别。如果您有C++14,则可以使用
auto
返回类型推断从函数返回lambda:

// I have an alias like this 
template<typename ... Args>
using msg_formatter = string(const string&, const Args &... );

// and it is returned by a class like this
class logger{
public:
msg_formatter* formatter() const;
};

// then somewhere else I wanna be able to call this
logger log;
log.formatter()("my text: %d", 123);

如果有,这与参数包无关。模板不是类型。函数返回(特定对象)类型,而不是模板。C++不按您希望的方式工作。<代码> MSGYFrimtTalter 是模板的名称,不是类型。
auto formatter() {
  return [](const string&, auto const&...) {/*...*/};
}