【问题标题】:C++ Initialize object with with non-const variable templateC++ 使用非常量变量模板初始化对象
【发布时间】:2015-12-08 18:04:52
【问题描述】:

我有一个使用这种模板的对象:

RTree<int, float, 2, float> tree;

第三个参数是我的树的维数。我希望每次创建新树时都会改变它。如何用每次更改的变量替换数字?编译器使用非常量变量抛出错误。

【问题讨论】:

  • 你根本做不到。我认为你需要问一个不同的问题。
  • 您是否尝试在运行时更改它?这是不可能的,你需要在程序运行之前,在编译时指定模板非类型参数之前
  • 我每次都会根据我阅读的文件创建不同的对象。问题是文件每次都有不同的维数,所以我每次都需要不同的树。有什么我可以做的吗?
  • 类模板中第三个参数怎么用?如果要成为成员变量,你的类模板能正常工作吗?如果是这样,那是最好的选择。如果没有,您将不得不重新考虑您的设计。
  • 是的,似乎没有理由去那里。这是我用于我的项目的库。我可能会将其设为成员值。

标签: c++ oop templates object


【解决方案1】:

您不能在运行时更改模板参数。


如果您的意图是在编译时随着树的每个新减速而改变树维度的数量,那么您可以这样做:

RTree<int, float, __COUNTER__, float> tree;

尽管在我看来,这将是有限的。


如果您打算在运行时更改它,请考虑将计数保留在 RTree 类中或通过构造函数参数,以便您可以指定树的维度。

【讨论】:

  • 感谢您的回答。我将在构造函数中创建一个参数。我以为我做错了什么,因为我在使用图书馆。
【解决方案2】:

这不是模板的工作方式,也无法以这种方式完成。它们用于编写独立于任何特定 type 而不是 value 的代码。你说你

“希望每次创建新树时都会更改”

那么只需给构造函数一个接受整数的参数并从那里开始。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多