声明一个模板化实例对象的函数指针

时间:2015-03-05 06:50:04

标签: c++ templates

已经看过许多具有模板化函数指针的例子。这里有一个例子template and typedef。我无法找到函数指针用于类实例的任何示例,该类实例是模板类。例如

namespace xyz{
    template <class T>  
    class TemplateClass{
        typedef std::string (*ParameterlessFunctionPointer)();
    }
}

如何在不同的类中定义ParameterlessFunctionPointer的实例?

3 个答案:

答案 0 :(得分:0)

如果要在多个类中定义,那么typedef应该在模板类的范围之外声明,并且只在xyz中声明。如果该类是typedef的唯一用户,则typedef实际上只放在一个类中。

答案 1 :(得分:0)

std::string foo()
{
   return "foo";
}

由于ParameterlessFunctionPointer不依赖于模板参数,因此您可以使用:

xyz::TemplateClass<int>::ParameterlessFunctionPointer ptr1 = &foo;
xyz::TemplateClass<double>::ParameterlessFunctionPointer ptr2 = &foo;

答案 2 :(得分:0)

这样的事情:

xyz::TemplateClass<int>::ParameterlessFunctionPointer fn = &some;

或者如果另一个类也是模板:

template <typename T>
struct OtherTemplateClass
{
    typename xyz::TemplateClass<T>::ParameterlessFunctionPointer fn_member;
};

为了缩短它,你可以根据需要使用typedef ......