C++ 推导typedef函数指针的模板参数
在使用typedef时,是否有方法推断函数指针的模板参数?我的示例代码是:C++ 推导typedef函数指针的模板参数,c++,templates,function-pointers,typedef,C++,Templates,Function Pointers,Typedef,在使用typedef时,是否有方法推断函数指针的模板参数?我的示例代码是: struct A {}; void func(const A&) {}; template <typename T> struct FuncPtr { typedef void(*Type)(const T&); }; void f_(FuncPtr<A>::Type) {} template <typename T> // I'd like to hid
struct A {};
void func(const A&) {};
template <typename T>
struct FuncPtr
{
typedef void(*Type)(const T&);
};
void f_(FuncPtr<A>::Type) {}
template <typename T> // I'd like to hide the messy function pointer in a typedef
void f1(typename FuncPtr<T>::Type fp) { f_(fp); }
template <typename T> // this works, but "fp" is really several lines long
void f2(void(*fp)(const T&)) { f_(fp); }
有了它,我可以打电话给f2AFunc。但我更希望使用更接近f1func的函数,因为在我的实际代码中,函数指针的声明要长得多。我需要有一个实际的函数指针,而不仅仅是传递一个模板参数,这样我就可以调用f_.而不是使用当前设置。::*左边的所有内容都是非推断上下文,因为元函数可以对类型应用任意图灵完全变换,并且在任何情况下,都不能保证原始类型和结果之间的一对一映射。所以这种语言甚至没有尝试过 但是别名模板可以工作:
template <class T>
using FuncPtr = void (*)(const T&);
template <typename T>
void f3(FuncPtr<T> fp) { return f_(fp); }
*正式名称为嵌套名称说明符,该类型是使用限定id[temp.decredit.type]/p5指定的。不适用于当前设置。::*左边的所有内容都是非推断上下文,因为元函数可以对类型应用任意图灵完全变换,并且在任何情况下,都不能保证原始类型和结果之间的一对一映射。所以这种语言甚至没有尝试过 但是别名模板可以工作:
template <class T>
using FuncPtr = void (*)(const T&);
template <typename T>
void f3(FuncPtr<T> fp) { return f_(fp); }
正式称为嵌套名称说明符,它是使用一个合格的id [TEMP.Time.Type ] /P5.< /P> < P>作为“有效的现代C++”项目9,喜欢别名声明到Type的声明: 特别是,在这种情况下,别名声明可以模板化 它们被称为别名模板,而typedefs不能。这给 C++11程序员提供了一种简单的表达机制 在C++98中,必须使用嵌套在其中的typedef进行黑客攻击 模板化结构。例如,考虑定义使用自定义分配器MyAlloc的链表的同义词。有了alias模板,这就很容易了:
使用typedef,您几乎必须从 划痕:作为“有效的现代C++”项目9,喜欢别名声明到Type Debug: 特别是,在这种情况下,别名声明可以模板化 它们被称为别名模板,而typedefs不能。这给 C++11程序员提供了一种简单的表达机制 在C++98中,必须使用嵌套在其中的typedef进行黑客攻击 模板化结构。例如,考虑定义使用自定义分配器MyAlloc的链表的同义词。有了alias模板,这就很容易了:
使用typedef,您几乎必须从 划痕:template<typename T>
struct MyAllocList {
typedef std::list<T, MyAlloc<T>> type;
};
MyAllocList<Widget>::type lw;