当前位置: 首页 > 知识库问答 >
问题:

用于计算指向成员的指针的C变量模板

金阳华
2023-03-14

我想创建一个可变模板,用于计算指向成员的嵌套指针。我尝试了以下方法:

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)”

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

共有1个答案

公胤运
2023-03-14

更改方法顺序并修复"错别字":

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...);
}

演示

 类似资料:
  • 是否可以将指针作为可变模板参数传递给成员。我似乎搞不懂语法。 对于函数调用,它的工作原理如下: 可以这样使用: 我希望以类似于类模板的方式传递params 应该这样使用: 我很难弄清楚什么东西应该是什么。 如果成员类型已知,并且只有一个参数,则可以这样做: 有没有一种方法来推广这个变量参数列表的成员指针,其中成员是不同的未知事先类型? 更新:用于固定已知类型的成员指针的变量参数包声明如下: 现在我

  • 假设有一个结构 我得到一个指向该结构的成员的指针,比如作为某个函数的参数: 如何获取指向包含对象的指针?最重要的是:在不违反标准中的某些规则的情况下,也就是说,我想要标准定义的行为,而不是未定义或实现定义的行为。 附带说明:我知道这规避了类型安全。

  • 主要内容:指针变量,使用指针检索数据的值,将指针作为参数传递给函数,使用指针访问数组元素,编译不安全代码为了保持类型的安全性,默认情况下 C# 是不支持指针的,但是如果使用 unsafe 关键字来修饰类或类中的成员,这样的类或类中成员就会被视为不安全代码,C# 允许在不安全代码中使用指针变量。在公共语言运行时 (CLR) 中,不安全代码是指无法验证的代码,不安全代码不一定是危险的,只是 CLR 无法验证该代码的安全性。因此 CLR 仅会执行信任程序集中包含的不安全代码。 指针变量 在 C# 中,

  • 指针变量保存的是地址,而地址本质上是一个整数,所以指针变量可以进行部分运算,例如加法、减法、比较等,请看下面的代码: 运行结果: 从运算结果可以看出:pa、pb、pc 每次加 1,它们的地址分别增加 4、8、1,正好是 int、double、char 类型的长度;减 2 时,地址分别减少 8、16、2,正好是 int、double、char 类型长度的 2 倍。 这很奇怪,指针变量加减运算的结果跟

  • 我正在学习如何在C中使用并写了以下示例: 问:是否保证在所有情况下指向一个结构的指针都是指向它的第一个元素的完全相同的指针? 在这种特殊的情况下,它能像我预期的那样工作,但我不确定它是否能得到保证。编译器可以在开始时插入一些填充吗? 我唯一能找到的关于结构类型布局的是N1570的类型: 结构类型描述了一组按顺序分配的非空成员对象(在某些情况下,还包括一个不完整的数组),每个对象都有一个可选的指定名

  • 所以我的教授喜欢用我们应该弄清楚的论文上的代码来测试我们。我不会发布代码,因为我不是在寻找答案,这只是他曾经让我们感到困惑的一件事是,当他初始化一个类的对象,然后初始化另一个类的指针指向上述对象时。它让我感到困惑,这是一个如此具体的问题,我不知道如何搜索它。例: “d- 当指针来自一个类却指向另一个类的对象时,它到底在做什么?我知道这个问题以前可能已经被回答过了,但是我在任何地方都找不到它,所以我