从 std::function 继承构造函数时"function returning a function"
"function returning a function" when inheriting constructors from 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 中。
要添加到 chris' 的答案中,如果您希望当前定义有效,请使用
MyFunction<void> mine = []() { std::cout << 42; };
如果你想要与 std::function
相同的漂亮MyFunction<R(Args...)>
语法,那么你必须提供一个未实现的主类模板,以及一个派生自std::function
的专用化(这正是std::function
所做的)。
template< class R, class... Args >
class MyFunction;
template< class R, class... Args >
class MyFunction<R(Args...)> : public std::function<R(Args...)>
{ ... }
现场演示
MyFunction<void()> mine
根据您的类,这会将R
推断为void()
,Args...
推断为空参数包。如果希望该语法正常工作,则必须专门化类模板:
template<class R, class... Args>
class MyFunction<R(Args...)> : blah
相关文章:
- "error: no matching function for call to"构造函数错误
- 调用专用模板时出错"no matching function for call to [...]"
- 库函数需要一个 std::function<void(void)>,如何传入类函数?
- Confusion: decltype vs std::function
- 为什么 std::function 可以作为 std::not2 的参数?
- 'max'匹配'std::function<const int &(const int &, const int &)>'无过载
- 传递给std::function template的template参数究竟代表什么
- 将带有unique_ptr的可变 lambda 传递给 const&std::function
- 绑定派生类方法C++从实例范围之外的分隔 std::function 变量调用
- "no matching function for call to 'Vector::Vector'"错误
- 如何在向量中删除 std::function<void()>?
- 不断"Attempting to reference a deleted function"
- 将函数包装器转换为 std::function
- 类型擦除的std::function与虚拟函数调用的开销
- C++ std::function 对于类 exept 的所有实例都是空的(只有 Visual2019 编译器问题)
- "Warning : No return statement in function returning non-void"是什么意思?
- 如何修复空虚拟方法的"warning: no return statement in function returning non-void [-Wreturn-type]"
- 从 std::function 继承构造函数时"function returning a function"
- 循环函数给出"return’ with a value, in function returning void"误差
- "error: ’myfn’ declared as function returning a function"是什么意思?