试图从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
}
的错误,回来是:
prog.cpp: In instantiation of ‘class MyFunction<void()>’:
prog.cpp:14:24: required from here
prog.cpp:6:7: error: function returning a function
class MyFunction : public std::function<R(Args...)> {
^
prog.cpp:8:38: error: function returning a function
using std::function<R(Args...)>::function;
^
prog.cpp:8:38: error: using-declaration for non-member at class scope
prog.cpp: In function ‘int main()’:
prog.cpp:14:55: error: conversion from ‘main()::__lambda1’
to non-scalar type ‘MyFunction<void()>’ requested
MyFunction<void()> mine = []() { std::cout << 42; };
在GCC 4.8.2。
大多数类型'std'没有被设计成与继承,包括'的std :: function'。 – Yakk 2014-12-03 03:36:33
@Yakk感谢您的提醒,虽然“你应该永远”的想法是有点争议的[“你不应该继承自std :: vector”](http://stackoverflow.com/questions/ 4353203/thou-shalt-not-inherit-from-stdvector)辩论。然而,这仅仅是一个当地的实验。 – HostileFork 2014-12-03 03:40:36
你也可以私下做,并且使用声明来实现你想要做的事情。这不会让基层得不到支持。 – chris 2014-12-03 05:25:54