Fed*_*aus 9 c++ templates function functor
当我尝试将函数作为模板模板类型参数传递给类时,遇到错误。为什么语言核心开发人员将无法启用此功能?可以传递函子类模板,但不能传递函数模板。
例如,在“ g ++(Ubuntu 8.3.0-6ubuntu1)8.3.0”中编译以下代码:
#include <iostream>
using namespace std;
template <template <typename> typename Functor>
class UseFunc
{
public:
void use()
{
Functor<int>(3);
Functor<char>('s');
}
};
template <typename T>
void func(T s)
{
cout << s << endl;
}
int main()
{
UseFunc<func> u {};
u.use();
}
Run Code Online (Sandbox Code Playgroud)
告诉:
kek.cpp: In function ‘int main()’:
kek.cpp:24:14: error: type/value mismatch at argument 1 in template parameter list for ‘template<template<class> class Functor> class UseFunc’
UseFunc<func> u {};
^
kek.cpp:24:14: note: expected a class template, got ‘func’
kek.cpp:25:4: error: request for member ‘use’ in ‘u’, which is of non-class type ‘int’
u.use();
^~~
Run Code Online (Sandbox Code Playgroud)
我希望它的实现方式与传递模板模板参数相同。归根结底,这只是对编译器的请求,因此可以实例化并以通常的方式使用具体类型的函数。
确实不了解此限制,如果有人可以告诉我实现此限制的难度,那将是很好的。
我不确定为什么 C++ 不提供函数模板模板参数的问题的答案,但我想它与以下内容有关:
auto,但这对于 C++ 来说显然太晚了) 98有函数模板模板参数)如果您相信自己知道如何解决所有这些问题,特别是可以提供令人信服的论据来说明为什么我们需要该语言中的此功能,尽管事实上它会很复杂,并且我们可以使用类模板模板参数来解决它的缺失,请随意为该标准撰写提案。