c++ - 关于在 C++ 中使用模板特征来选择数据类型

标签 c++ templates

我正在学习c++模板,想应用所谓的模板特性来选择数据类型。我在网上找到了一些代码并使其适用于我的案例

#include <iostream>

using namespace std;

template <bool T> struct TM;
template <> struct TM<true>  {typedef double MType;};
template <> struct TM<false> {typedef int MType;};

int main(int argc, char *argv[])
{
  TM<true>::MType x;
  TM<false>::MType y;

  cout << sizeof(x) << endl;
  cout << sizeof(y) << endl; 
  return 0;
}

效果还不错。但是,这似乎只适用于常量 bool 值而不适用于变量,所以下面的代码不起作用

#include <iostream>

using namespace std;

template <bool T> struct TM;
template <> struct TM<true>  {typedef double MType;};
template <> struct TM<false> {typedef int MType;};

int main(int argc, char *argv[])
{
  bool var=true;

  TM<var>::MType w;

  if (var) TM<true>::MType z;
  else TM<false>::MType z;

  cout << sizeof(w) << endl;
  cout << sizeof(z) << endl;
  return 0;
}

那么模板特征对运行时定义的变量不起作用是真的吗?谢谢

最佳答案

在 C++ 中,编译器从模板中为所有使用的模板参数创建源代码。这是在编译期间完成的。然后将创建的源代码作为常规源代码进行编译。

因此,在您的情况下,TM<true>TM<false>被视为完全不同的类型。如果你写类似 TM<var>::MType 的东西编译器无法找出它是两种类型中的哪一种,因为信息在运行前不可用。

关于c++ - 关于在 C++ 中使用模板特征来选择数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18072661/

相关文章:

c++ - 返回无法按值复制的对象

c++ - 这是无效的 C++ 吗?

c++ - 模板类的嵌套类中的Friend运算符

C++ 复合模板类工厂

C++引入 'new'模板参数

c++ - 如果 new 抛出 std::bad_alloc 是否会将指针设置为 NULL?

c++ - 计算 map 中相同值的数量

c++ - 如何使用 lambda 来进行 std::invoke 惰性求值?

php - 如何动态设置模板属性(包括CSS)PHP

javascript - 在循环中的仪表板 ui_template (node-red) 中创建复选框并将检查状态分配给输出 msg.payload