作者热门文章
- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
在给定模板参数之一的数字常量的情况下,是否有一种直接的方法来定义 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/
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 4 年前。
正如您在 this travis.yml 中看到的那样文件,我的代码依赖于一些第三方库,我在构建项目之前将它们安装在远程系统上。 Travis 每次推送提交时都会下载并构建这些库,这可以避免吗?我的意
我是一名优秀的程序员,十分优秀!