C++ 声明模板化实例对象的函数指针

C++ 声明模板化实例对象的函数指针,c++,templates,C++,Templates,我们已经看到了许多具有模板化函数指针的示例。这里有一个例子。我找不到函数指针用于模板类的类实例的任何示例。比如说 namespace xyz{ template <class T> class TemplateClass{ typedef std::string (*ParameterlessFunctionPointer)(); } } 名称空间xyz{ 样板 类模板类{ typedef std::string(*无参数函数指针)();

我们已经看到了许多具有模板化函数指针的示例。这里有一个例子。我找不到函数指针用于模板类的类实例的任何示例。比如说

namespace xyz{
    template <class T>  
    class TemplateClass{
        typedef std::string (*ParameterlessFunctionPointer)();
    }
}
名称空间xyz{
样板
类模板类{
typedef std::string(*无参数函数指针)();
}
}

如何在另一个类中定义
无参数FunctionPointer
的实例

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

std::string foo()
{
   return "foo";
}
由于
ParameterlessFunctionPointer
不依赖于模板参数,因此可以使用:

xyz::TemplateClass<int>::ParameterlessFunctionPointer ptr1 = &foo;
xyz::TemplateClass<double>::ParameterlessFunctionPointer ptr2 = &foo;
xyz::TemplateClass::无参数函数指针ptr1=&foo;
xyz::TemplateClass::ParameterlessFunctionPointer ptr2=&foo;
类似这样的内容:

xyz::TemplateClass<int>::ParameterlessFunctionPointer fn = &some;
xyz::TemplateClass::无参数函数指针fn=&some;
或者,如果另一个类也是模板:

template <typename T>
struct OtherTemplateClass
{
    typename xyz::TemplateClass<T>::ParameterlessFunctionPointer fn_member;
};
模板
结构OtherTemplateClass
{
typename xyz::TemplateClass::ParameterlessFunctionPointer fn_成员;
};

如果需要,您可以使用typedef将其缩短…

有什么问题吗?
typedef
的一个明显用法,它编译得很好。它看起来像链接的GOTW文章中提到的用途。这里的一个例子是
Registry::Type employeeRoster。我的函数指针在另一个类中声明。这个声明也可以使用模板吗?否则,我需要声明所有可能类型的函数指针,这会破坏模板的使用。这正是我试图做的,但对我来说不起作用。访问模板化类的函数指针会生成语法错误<代码>文件.h:116:错误:类型“xyz::TemplateClass”不是从类型“xyz::ParameterlessFunctionPointer”派生而来的
@Alok
ParameterlessFunctionPointer
不是模板,为什么要尝试实例化它?(根据您的错误消息,它试图用作模板,这肯定是不正确的),因此我的意思是我需要创建所有可能类型的模板类的函数指针对象?我不能为此目的使用模板?违背了模板对我的作用。@好吧,我不清楚您希望从类模板中使用
typedef
得到什么。这是因为我们不能使用模板化的typedef。实现这一点的唯一方法是在模板类中使用typedef。我的问题是
无参数函数指针
。我需要为它支持的每种类型声明特定的指针。这不能被模板化。