Res*_*ion 8 c++ templates pointers member-function-pointers
考虑这个特殊的容器类,它存储包含键和值的类型,所以
template<typename K, typename T, K (T::*method)() const>
class Container
{
//...
};
Run Code Online (Sandbox Code Playgroud)
K是键的类型,T是一种值,方法指针用于从值中检索键.
它工作正常,但我想包含方法指针的默认值,以便当调用者没有指定它时,它将是operator K() const这样的:
template<typename K, typename T, K (T::*method)() const = &T::operator K const>
Run Code Online (Sandbox Code Playgroud)
但这并没有编译声明no member operator const K on A (<- my class I test this with)当我尝试实例化它时(并且有这样的方法).甚至可以使用方法指针模板参数的默认值吗?如果是,那么正确的语法是什么?
编辑:除了下面的解决方案,还有一个"修复"的情况,当T是一个使用新的C++ 11功能的指针std::remove_pointer<T>::type,所以:
template<typename K, typename T, K (std::remove_pointer<T>::type::*method)() const = &std::remove_pointer<T>::type::operator K>
Run Code Online (Sandbox Code Playgroud)
函数的名称就是operator K.它的资格不是名称的一部分.尝试:
template <typename K,
typename T,
K (T::*method)() const = &T::operator K>
// ^^^^^^^^^^^^^^
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
321 次 |
| 最近记录: |