gpt4 book ai didi

具有常量值的 C++ 模板特化

转载 作者:IT老高 更新时间:2023-10-28 12:39:21 36 4
gpt4 key购买 nike

在给定模板参数之一的数字常量的情况下,是否有一种直接的方法来定义 C++ 模板类的部分特化?我正在尝试仅为某些类型的模板组合创建特殊的构造函数:

template <typename A, size_t B> class Example
{
public:
Example() { };

A value[B];
};

template <typename A, 2> class Example
{
public:
Example(b1, b2) { value[0] = b1; value[1] = b2; };
};

此示例无法编译,在第二个定义中返回错误Expected identifier before numeric constant

我在这里和其他地方浏览了许多示例,但大多数似乎都围绕着专门处理类型而不是常量。

编辑:

寻找一种方法来编写一个有条件使用的构造函数,功能上是这样的:

template <typename A, size_t B> class Example
{
public:
// Default constructor
Example() { };

// Specialized constructor for two values
Example<A,2>(A b1, A b2) { value[0] = b1; value[1] = b2; };

A foo() {
A r;

for (size_t i = 0; i < b; ++b)
r += value[i];

return r;
}

// Hypothetical specialized implementation
A foo<A, 2>() {
return value[0] + value[1];
}

A value[B];
};

最佳答案

您需要将特化放在正确的位置:

template <typename A> class Example<A,2>

如果要创建子类:

template <typename A> class ExampleSpecialization : public Example<A,2>

专门针对 typedef 的行为类似于专门针对整数参数的行为。

关于具有常量值的 C++ 模板特化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4840819/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com