如何在c++中获取某个类型的“嵌套”模板参数的数量? 我想写一个返回T的模板参数数量的函数GetNumberOfTypes<T>() constexpr int a = GetNumberOfTypes<int>(); //a == 0
constexpr int b = GetNumberOfTypes<std::vector<int>>(); //b == 1
constexpr int c = GetNumberOfTypes<std::tuple<int,int>>(); //c == 2 这能以某种方式实现吗?
我编写了以下隐藏成员函数模板的代码。
#include <iostream>
struct A
{
template<int> void func()
{
std::cout<<"Function tamplate of A"<<std::endl;
}
};
struct B : A
{
template<char> void func()
{
std::cout<<"Function tamplate of B
line 1; template <class T, T t> struct C {}; // primary template
line 2: template <class T> struct C<T, 1>; // error: type of the argument 1 is
// which depends on the parameter T
我的理解是,主模板接受两个相同类型的模板参数。但是在第二行中,一个参数是未知的,第二个参数是int(1),所以这两个参数在某些情况下
我的编译器是gcc 4.9.0。无法编译下列代码:
template<typename T, T i>
struct value {};
template<typename T>
struct value<T, 0> {};
// error: type 'T' of template argument '0' depends on a template parameter
原因是什么?那么,如何解决这个问题呢?
在以下示例中:
template <class T, int n>
class MyContainer{
public:
T myArray[size];
int size;
MyContainer() : size(n){}
};
// full or partial specialization?
template <int n>
class MyContainer <double, n>{
public:
double myArray[n];
int size;
MyContainer() : size(
我有一个特性可以返回一些关于类的信息,例如维数:
template< typename T >
struct NumDims;
对于“正常”类,这很容易专门化:
template<>
struct NumDims< MyClass >: std::integral_constant< unsigned, 3 >{};
但是,我有一些重模板类,它们都有一个常见的静态类,如:
template< class T, class U, class V, bool x, bool y, bool z >
struct TemplateClass
我想专门制作一个模板。专门化将另一种模板作为一种类型,该模板具有一个非类型模板参数。我希望专门化应用于非类型参数的任何值。我可以专门为一个特定的非类型值,但我不知道如何在一般情况下。
例如:
template<typename T, int N> // first definition
struct A;
template<typename T> // second definition
struct B;
template<> // this compiles, N is fixed
stru
我知道在C++中,泛型实际上并不存在,但是您可以使用template来模拟它。当您构建代码时,编译器会对代码进行预处理,并生成一个新代码,替换为对象声明中指定的实际值的泛型值,然后是真正编译的新代码。例如,假设类A如下所示:
template<class T>
class A
{
T f();
};
然后在代码中的其他地方,我们有A<int> a;。实际编译的代码是:
class A
{
//Replaces T by int in the pre-processing
int f();
};
在这整个介绍之后,让我们讲到重点。
我的问题是:
我试着用GCC 4.7快照来做一些类似的事情:
template <int n, int... xs>
struct foo {
static const int value = 0;
};
// partial specialization where n is number of ints in xs:
template <int... xs>
struct foo<sizeof...(xs), xs...> { // error: template argument ‘sizeof (xs ...)’
我正在尝试实现一个通用队列fifo,但在尝试从定义为基模板类的专门化类中选择正确的专门化类方面,我无法取得任何进展。下面是代码:这段代码首先描述了链接列表实现,因此定义了类Node和a enum类来描述将要使用的队列类型(链接列表或固定数组),第一部分(Node和GenericQueueType)工作良好,在主函数中首先定义一些测试。然后,将用作包装类的包装函数不选择为使用链接列表而定义的部分专门化。
#include <iostream>
#include <string>
//The node definition used for the linked list
我想把TMP的数字从1加到N-1。因此,我编写了如下所示的源代码,但出现了一个错误template argument '(number - 1)' involves template parameter(s)。你知道怎么处理这件事吗?
template <int number, int i = 1>
class Sum {
public:
static const int result = i + Sum<number, i + 1>::result;
};
template <int number>
class S