小编Hug*_*ugo的帖子

C++模板 - 使用"std :: is_same_v"而不是专门化并避免编译错误?

我是模板的新手,我正在尝试使用它们,以避免重复非常相似的功能.

在下面的例子中,我做了一个简单而小巧的工作示例来说明我的问题.

特别是,我有两个struct("solo"和"duo").这些结构有一个共同的成员(a),其中一个有一个特定的成员(b).

然后我有一个模板函数,可以采取结构和打印成员...并且我希望它只能在结构类型为"duo"时才能打印成员b.

我这样做(使用std :: is_same_v)它不会编译.我读到可以使用专业化这样做,但我想知道是否有更优雅的方式?因为那时我有失去模板优势的感觉......但是我可能还没有获得模板的强大功能以及如何使用它们.

非常感谢您的帮助!

#include <iostream>
#include <string>
#include <type_traits>

struct solo{
  int a;     
};

struct duo : solo{
    int b;
};

template<class T>
void function(T test){
 std::cout<< std::to_string(test.a);
 if(std::is_same<T, duo>::value) std::cout<< std::to_string(test.b);
}

int main()
{
  solo testS;
  testS.a = 1;

  function(testS);
}
Run Code Online (Sandbox Code Playgroud)

c++ templates

5
推荐指数
2
解决办法
3216
查看次数

标签 统计

c++ ×1

templates ×1