【发布时间】:2014-05-29 10:26:27
【问题描述】:
template<class T, class... TA> Uptr<T, TA> makeUniquePtr(/*...*/) { /*...*/ };
template<class T, class... TA> Sptr<T, TA> makeSharedPtr(/*...*/) { /*...*/ };
template<typename TFPType, TFPType TFP> void func(/*...*/) { /*...*/ }
template<class T, class... TA> void implementation1(/*...*/)
{
// Can this be reduced to func<&makeUniquePtr, T, TA...>?
func<decltype(&makeUniquePtr<T, TA...>), &makeUniquePtr<T, TA...>>(/*...*/);
}
template<class T, class... TA> void implementation2(/*...*/)
{
// Can this be reduced to func<&makeSharedPtr, T, TA...>?
func<decltype(&makeSharedPtr<T, TA...>), &makeSharedPtr<T, TA...>>(/*...*/);
}
调用func</*...*/>(/*...*/) 非常冗长。有没有办法简单地调用
func<&makeSharedPtr, T, TA...>(/*...*/)
并在内部使用
&makeSharedPtr<T, TA...>
不让用户指定两次?
【问题讨论】:
-
尝试使用宏。函数模板本身不能是模板参数。
-
@Constructor:宏是我最后的手段——我希望有一种方法可以在不使用预处理器的情况下达到我想要的结果。
-
用辅助类模板包装
makeXXXPtr函数模板(使其成为此类模板的静态方法)。类模板可以是模板的参数。
标签: c++ templates c++11 parameters function-pointers