我目前正在开发一个处理指向成员函数的指针的模板函数。它最初看起来像这样:
template <typename C, typename RT, typename... P>
auto CreateTestSuite(RT(C::* pFunc)(P...))
{...}
Run Code Online (Sandbox Code Playgroud)
然而,我很快发现,如果我尝试向它传递一个指向 const 成员函数的指针,模板将无法识别它。所以我然后添加了这个重载版本:
template <typename C, typename RT, typename... P>
auto CreateTestSuite(RT(C::* pFunc)(P...) const)
{...}
Run Code Online (Sandbox Code Playgroud)
对于分别具有 const 和 non-const 的两个不同的成员函数,它工作得很好。但是,如果我尝试调用CreateTestSuite指向重载成员函数的指针,则会出现问题。
例如,假设我有以下 A 类:
class A
{
public:
return_type test(...) {...}
return_type test(...) const {...}
};
Run Code Online (Sandbox Code Playgroud)
现在当我尝试进行函数调用时
CreateTestSuite(&A::test);
Run Code Online (Sandbox Code Playgroud)
编译器将无法判断我正在使用哪个重载版本。此外,这个问题不能通过显式指定模板参数来解决,因为它们对于CreateTestSuite.
如何从两个版本中明确选择?
编辑:
我可以接受对CreateTestSuite.
非常感谢。