我正在研究模板专业化中函数类型的使用,我想知道是否有成员函数类型之类的东西(不是在谈论成员函数指针)。
导致我提出这个问题的案例可以通过一个例子更好地解释......
template< typename FunctionType >
struct Function; // Undefined
// Specialize for functions with 0 parameter...
template< typename ReturnType >
struct Function< ReturnType() > // Notice the unusual syntax here...
{
// Function pointer that fits the signature of the template...
ReturnType (*m_pointerToFunction)();
};
// Specialize for functions with 1 parameter...
template< typename ReturnType, typename ParameterType >
struct Function< ReturnType(ParameterType) >
{
ReturnType (*m_pointerToFunction)(ParameterType);
};
// ... etc up to a certain number of parameter.
// To use this template:
void SomeFunctionTakingNoParameter()
{
}
Function< void() > test;
test.m_pointerToFunction = SomeFunctionTakingNoParameter;
现在我想做的是为成员函数创建专业化。我尝试的第一件事是:
template< typename ReturnType, typename ObjectType, typename ParameterType >
class Function< ObjectType, ReturnType(ParameterType) >
{
ReturnType (ObjectType::*m_memberFunctionPointer)(ParameterType);
};
我像这样使用它:
struct Object
{
void DoSomething()
{
}
};
Function< Object, void() > function;
function.m_memberFunctionPointer = &Object::DoSomething;
我必须为模板提供 2 个参数(对象类型和签名)。我想看看是否有一种方法可以在一个参数中完成所有操作。
下一位无法编译,但我想知道语言中是否有类似的东西?
template< typename ObjectType, typename ReturnType >
struct Function< ObjectType::ReturnType() >
{
ReturnType (ObjectType::*m_memberFunctionPointer)();
};
Function< Object::void() > function;
function.m_memberFunctionPointer = &Object::DoSomething;