【问题标题】:Can I access a struct passed into a template generically?我可以访问一般传递给模板的结构吗?
【发布时间】:2014-05-20 16:24:24
【问题描述】:

根据标题,这就是我想要做的。基本上我希望从文件中加载结构,但支持各种结构,所以我试图在模板中进行。这是我第一次使用模板,请原谅我的无知!

我希望能够做类似的事情:

template<class T> T ConfigLoader::LoadStructFromFile(T a)
{
    int noOfThingsInStruct;
    noOfThingsInStruct = a[1];
    return a;
}

这有可能吗? 我的函数对从文件等加载的字符串进行排序,但我认为我会把那部分排除在外。 我希望能够获取此值以使用它来循环并为结构提供它正在寻找的正确数量的值。

【问题讨论】:

  • 旁注:things_count 不会比noOfThingsInStruct 更清楚吗?我看到很多人认为长名称更具描述性,所以它更好。不,它们只会让你失明。
  • 尝试 Boost 序列化。在设计之前使用某些东西是个好主意。例如。你不会想成为从未坐过飞机的人设计的飞机上的乘客。
  • 可能是的,但是发布问题很快。
  • @Cheersandhth.-Alf 我正在对此进行编程以专门避免使用 boost :)。
  • 好的,但是(我仍然建议你)先尝试一下。

标签: c++ templates struct


【解决方案1】:

所以你想动态地找出结构中的成员和方法?类似于,比如说,你可以在运行时用 Javascript 做什么,但在编译时?不,你不能。但是,您可以制定模板策略并以此为基础。

【讨论】:

  • 对不起,我不太明白你的意思?和第二部分一样。
  • 我不太确定。从理论上讲,对于具体的实例化,您知道所有字段的大小。如果一些可变参数模板或增强魔法能够弄清楚存在哪些类型的字段,我不会感到惊讶。问题可能在于编译器可以重新组织成员的顺序和内存布局。
【解决方案2】:

简单的答案:不可能。

长答案:仍然没有。

绕道:

  • 您可以使用基于type traits 的东西。创建一个模板类numberOfElements&lt;typename T&gt; 并为您需要的每个struct 重载它,并使用您期望的值。然后,在您的LoadStructFromFile 中使用它,因为您知道T
  • 您还可以使用SFINAE 来测试某个函数,该函数将返回结构中的元素数。如果给定的类/结构实现了它,只需使用它来获取成员数。如果没有 - 假设只有 1 个成员(或任何你想要的)。

【讨论】:

  • 看来我得重新设计我的做法,减去模板。我不仅需要访问第一个元素,还需要访问之后的每个元素,以便将文本文件中的值放入其中。感谢您的回答。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-05-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多