首先是我的问题,然后解释我正在尝试做什么,因为我可能会错误地处理问题。
是否可以在指定其他参数的同时从参数中推导出多参数模板中的第一个模板参数。
例子:
template<class A, class B>
B function(A object)
{
return B(A);
}
称为:
function<BType>(AInstance);
我找不到一种方法来完成这项工作。
编辑:另一个例子可能更适合我下面的问题,正如我收到的第一条评论所表明的那样
例子:
template<class A, A::B foo>
void function(A object)
{
object.doSomethingWithTypeA::B(foo);
}
称为:
function<A::BInstance>(AInstance);
不同之处在于,第二个模板参数依赖于第一个模板参数的特定类型,因此我无法切换模板参数。
现在描述我正在尝试做的事情:
我目前正在尝试创建一个模板通用仿函数类,它可以采用自由函数或成员函数并将其包装到仿函数中。
我成功地实现了我的目标,但现在我想让一切变得更加用户友好。目前创建函子的模板化函数如下所示:
template <class T, ReturnType (T::*Method)(FunctionArguments...)>
static constexpr UniversalFunctor Create(T* object) {
return {object, MethodWrapper<T, Method>};
}
现在要为用户必须调用的成员函数创建函子
UniversalFunctor<ReturnType>::Create<ClassName, ClassFunction>(Object)
这是相当麻烦的。
由于 Object 必须是 ClassName 类型或者至少可以推导出来,我预计会出现这样的调用:
UniversalFunctor<ReturnType>::Create<ClassFunction>(Object)
也应该能够成功,因为 ClassName 参数可以从传递的指针中推导出来。然而,这似乎不可能,因为 ClassFunction 始终被视为第一个模板参数。