对成员类型的成员方法使用 std::result_of<>
Using std::result_of<> for member method of member type
我正在使用一个没有指定其键入为公共成员的keytype的hashmap类型,仅是valueType。检索键盘的一种方法是将std::result_of
与HashMap<>::Entry::GetKey()
方法一起使用。我无法在模板中工作。
template <typename K, typename V>
class Map {
public:
using ValueType = V;
class Entry {
public:
K GetKey();
};
};
这很好:
using M = Map<int, float>;
using T = std::result_of<decltype(&M::Entry::GetKey)(M::Entry)>::type;
static_assert(std::is_same<T, int>::value, "T is not int");
但是,我该如何从 M
是模板类型参数的模板中进行?我试图使用上述并插入typename
关键字而没有成功。
template <typename M>
struct GetKeyType {
using T = std::result_of<decltype(&(typename M::Entry)::GetKey)(typename M::Entry)>::type;
};
using T = GetKeyType<Map<int, float>>::T;
static_assert(std::is_same<T, int>::value, "T is not R");
&M::Entry::GetKey
是整体,您不应通过typename
分开它们。
以下代码将起作用:
template <typename M>
struct GetKeyType {
using T = typename std::result_of<decltype(&M::Entry::GetKey)(typename M::Entry)>::type;
};
相关文章:
- 请解释这句话(cout<<1+int((a<b)^((b-a)&1) )<<endl
- 呼叫运营商<<临时
- 如何防止clang格式在流运算符调用之间添加换行符<<
- <<操作员在下面的行中工作
- 叮当声:折叠表情和"expression result unused"警告
- 如何显式调用运算符<<
- 错误 C4700:使用未初始化的局部变量'result'
- 模板操作员&lt;未打电话
- C / CUDA中的模板方法是3个角括号(&lt;&lt;&lt;)
- C - 创建矢量&lt; vector&lt; double&gt;&gt;矩阵具有分配而不是inizializ
- 错误:调用"std::vector<:vector<int>>::p ush_back(std::vector<std::__cxx11::basic_string<
- C 建造者Clang STD :: Sill,找不到超载的操作员&lt;
- 为什么STD :: MAP需要操作员&lt;以及我如何写一个
- 为什么“操作员”需要const但不是为“运营商&lt;”
- 为什么将此对向量&lt; map&lt; int,int&gt;&gt;中的地图进行更新.失败
- "Control reaches end on non-void function" with do { return result; } while(condition);
- C :对矢量进行排序&lt; struct&gt;(结构有2个整数)基于结构的整数之一
- 明确的专业化“ CheckIntmap&lt;&gt;”实例化
- 什么是模板&lt;&gt;inline bla bla
- Parsing result from getline