C++ &引用;函数返回函数";从std::function继承构造函数时

C++ &引用;函数返回函数";从std::function继承构造函数时,c++,inheritance,c++11,constructor,using,C++,Inheritance,C++11,Constructor,Using,尝试从std::function派生一个类,首先继承构造函数。这就是我所猜测的: #include <iostream> #include <functional> using namespace std; template< class R, class... Args > class MyFunction : public std::function<R(Args...)> { public: using std::function&

尝试从
std::function
派生一个类,首先继承构造函数。这就是我所猜测的:

#include <iostream>
#include <functional>
using namespace std;

template< class R, class... Args >
class MyFunction : public std::function<R(Args...)> {
public:
    using std::function<R(Args...)>::function;
};

int main() {
    std::function<void()> f_display_42 = []() { std::cout << 42; }; //works

    MyFunction<void()> mine = []() { std::cout << 42; }; //errors
}
#包括
#包括
使用名称空间std;
模板<类R,类。。。Args>
类MyFunction:public std::function{
公众:
使用std::function::function;
};
int main(){
std::function f_display_42=[](){std::cout要添加到chris',如果您希望当前定义正常工作,请使用

MyFunction<void> mine = []() { std::cout << 42; };

要添加到chris',如果您希望当前定义有效,请使用

MyFunction<void> mine = []() { std::cout << 42; };

要添加到chris',如果您希望当前定义有效,请使用

MyFunction<void> mine = []() { std::cout << 42; };

要添加到chris',如果您希望当前定义有效,请使用

MyFunction<void> mine = []() { std::cout << 42; };

std
中的大多数类型都不是为继承而设计的,包括
std::function
@Yakk感谢您的提醒,尽管“应该”的想法在类似的争论中有点争议。不过,这只是目前的一个局部实验。您最好私下进行,并使用声明来实现您想要实现的内容。这就不可能缺少基类的支持。std中的大多数类型都不是为inher设计的它来自,包括
std::function
@Yakk感谢您的提醒,尽管“你应该曾经”在类似的争论中有点争议。不过,这只是目前的一个局部实验。您最好私下进行,并使用声明来实现您想要实现的内容。这就不可能缺少基类的支持。std中的大多数类型都不是为inher设计的它来自,包括
std::function
@Yakk感谢您的提醒,尽管“你应该曾经”在类似的争论中有点争议。不过,这只是目前的一个局部实验。您最好私下进行,并使用声明来实现您想要实现的内容。这就不可能缺少基类的支持。std中的大多数类型都不是为inher设计的它来自,包括
std::function
@Yakk感谢您的提醒,尽管“你应该曾经”在类似的辩论中有点争议。不过,这只是目前的一个局部实验。你最好私下进行,并且只使用声明来实现你想要实现的内容。这就不可能缺少基类的支持。啊,我明白了。这就是为什么
/*未定义的原因*/
在非专业的…谢谢!啊,我明白了。这就是为什么在非专业的…谢谢!啊,我明白了。这就是为什么在非专业的…谢谢!啊,这就是为什么在非专业的…谢谢!啊,我明白了。这就是为什么在非专业的…上有
/*未定义的*/
的原因。谢谢!
template< class R, class... Args >
class MyFunction;

template< class R, class... Args >
class MyFunction<R(Args...)> : public std::function<R(Args...)>
{ ... }