【发布时间】:2017-02-20 06:41:19
【问题描述】:
下面的代码将参数包转发给一些用户定义的可调用对象(在本例中为函数指针)。 C++11 中有没有办法返回可调用的返回值?更具体地说,我希望能够推断 raise() 的返回类型,以便可以向其添加 return 语句。我意识到我可以只添加一个返回类型模板参数,但是我们应该不知道模板参数 Func 的返回类型吗?
size_t example(const std::string& str)
{
return str.size();
}
template <class Func>
class signal
{
public:
signal()
{
}
~signal()
{
}
void attach(Func handler)
{
_handler = handler;
}
template <typename... T>
void raise(T&&... args)
{
auto val = _handler(std::forward<T>(args)...);
// How do I return this?
}
private:
Func _handler;
};
typedef size_t(*fcn)(const std::string&);
int main()
{
signal<fcn> sig;
sig.attach(&example);
sig.raise("hello!");
return 0;
}
【问题讨论】:
-
你能使用 C++14 的特性吗?