C 变量模板评估指向成员的指针



我想创建一个评估嵌套指针对成员的变异模板。我尝试了以下内容:

template<typename T, typename U, typename... V>
auto getField(T &input, U (T::*field), V... args)
    -> decltype(getField(input.*field, &args...))
{
    getField(input.*field, &args...);
}
template<typename T, typename U>
U getField(T &input, U (T::*field))
{
    return input.*field;
}
struct inner {
    int val;
};
struct outer {
    inner in;
};
void main() {
    outer p{{5}};
    cout << getField(p, &outer::in, &inner::val) << endl;
}

当我在VS中编译上述内容时,我会收到以下错误消息:

错误c2672:'getfield':找不到匹配的超载函数
错误C2893:未能专业化功能模板'未知类型getfield(t&amp;,u t ::*,v ...)'
注意:使用以下模板参数:
注意:'t =外部'
注意:'u = outer ::内'
注意:'v = {int oferat :: inner ::*}'

如何修复上述variadic模板以编译并返回p.in.val?请注意,我的编译器不支持自动模板参数。

更改方法的顺序和修复" typos":

template<typename T, typename U>
U getField(T &input, U (T::*field))
{
    return input.*field;
}
template<typename T, typename U, typename... V>
auto getField(T &input, U (T::*field), V... args)
    -> decltype(getField(input.*field, args...))
{
    return getField(input.*field, args...);
}

demo

相关内容

  • 没有找到相关文章

最新更新