c – Variadic模板,没有值

前端之家收集整理的这篇文章主要介绍了c – Variadic模板,没有值前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
模板适用于编程模板函数和类,因此我们可以使用缩短代码并让编译器为我们做一些工作.

在我的情况下,我想使用模板类,例如.

template <typename T,typename G> class unicorn {
T value01;
G value02;   <- not used in ever instance of class unicorn
};

有没有办法,编译器使用typename T = int创建一个实例,如果没有使用或指定,没有typename G的版本?

所以结果如下:

unicorn <double,int>;

class unicorn {
double value01;
int value02;
};

并且没有Argument或指定的typename G.

unicorn <double>

class unicorn {
T value01;
// "not included in this instance"
};

解决方法

如果您的用例数量有限并且不想深入了解深层模板元编程,那么您可以简单地进行模板专业化
#include <iostream>
using namespace std;

template <typename... Args>
struct Something;

template <typename T>
struct Something<T> {
  T a;
};

template <typename T,typename U>
struct Something<T,U> {
  T a;
  U b;
};

int main() {
  __attribute__((unused)) Something<int> a;
  __attribute__((unused)) Something<int,double> b;

  return 0;
}

但是对于一般情况我认为std :: tuple可能会在这里做到这一点.看看下面的代码

#include <tuple>
#include <iostream>
using namespace std;

template <typename... Args>
class Something {
  std::tuple<Args...> tup;
};

int main() {
  __attribute__((unused)) Something<int> a;
  __attribute__((unused)) Something<int,double> b;

  return 0;
}

当然你应该知道一些像std :: ref和get<>这样的东西.功能与元组.您还可以使用某些模板元编程来访问模板包的类型.我不是在这里解释,因为它可能会成为一个非常长的答案,如果你仍然希望我这样做,请在下面的评论中告诉我,我会尽力向你解释.

猜你在找的C&C++相关文章