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...)>
{ ... }