标题听起来令人困惑,但这里是一些代码,将其清除,如何函数指针声明一个模板函数返回类型依赖于模板类
template<class Act>
auto ActWrapper(Act && act, std::mutex mutex) -> decltype(act())
{
//....
return act();
}
如何将一个函数指针写入上述功能?
标题听起来令人困惑,但这里是一些代码,将其清除,如何函数指针声明一个模板函数返回类型依赖于模板类
template<class Act>
auto ActWrapper(Act && act, std::mutex mutex) -> decltype(act())
{
//....
return act();
}
如何将一个函数指针写入上述功能?
没有模板函数指针,如果这是你在找什么。如果你想有一个指向特定实例的函数指针,你需要确切地知道函数实例化的签名。
您可以随时与auto
骗:
auto ptr = &ActWrapper<foo>;
如果您不能使用auto
,你需要知道的返回类型:
return_t(*ptr)(foo&&, std::mutex) = &ActWrapper<foo>;
// or
decltype(ActWrapper(std::declval<foo>(), {}))(*ptr)(foo&&, std::mutex) = &ActWrapper<foo>;
如何编写一个函数指针以上功能?
您不能声明函数指针指向函数模板。你只能声明一个函数指针。
如果Foo
是ActWrapper
的有效类型,则可以声明函数指针指向ActWrapper<Foo>
。那时你会知道函数的返回类型,你可以使用它。
using returntype = <the return type of Foo::operator()>;
using FuncionPtrType = returntype (*)(Foo&&, std::mutex);
FuncionPtrType functionPtr = ActWrapper<Foo>;
正如其他人pointed out,你不能让一个简单的函数指针一整套功能,只对模板的特定实例。
如果你需要传递一些东西来引用整个集合,而不是一个特定的函数,你需要将它包装在一个带有operator()
的lambda或class中,然后传递它。
以上不是函数,它是一个能够生成函数的函数模板。 –
由于'std :: mutex'没有拷贝构造函数,这是否可以用有用的方式调用? –