gpt4 book ai didi

c++ - 向专门的模板类添加新的构造函数

转载 作者:行者123 更新时间:2023-12-02 18:08:00 25 4
gpt4 key购买 nike

我有一个定义固定长度数组的类 n ,用一些方法。

template<int n>
struct array_container{
/* some code here */
int array[n];
};

假设我想向 array_container<3> 添加一个构造函数,大致如下:

array_container<3>::array_container(int a0, int a1 ,int a2){
array[0] = a0;
array[1] = a1;
array[2] = a1;
}

我知道有两种方法可以做到这一点:

一是复制泛型类的全部代码,替换 n 3,并添加我的构造函数:

template<>
struct array_container<3>{
/* some code here */
int array[3];

array_container(int a0, int a1 ,int a2){
array[0] = a0;
array[1] = a1;
array[2] = a1; }
};

这可以正常工作,但缺点是需要从通用库复制所有代码和方法。

另一种方法是添加构造函数 array_container(int a0, int a1, int a2);在泛型类中,然后定义:

template<>
array_container<3>:: array_container(int a0, int a1 ,int a2){
array[0] = a0;
array[1] = a1;
array[2] = a1; }

这有一个缺点,就是用最好的未定义的或最坏的不正确的构造函数填充我的通用基类,例如 array_container<2>(int a0, int a1 ,int a2) (未定义或不正确取决于我是否将定义添加到通用基础中)。

有没有什么方法可以避免这两个陷阱? IE。不需要复制粘贴整个通用基础代码来进行专门化,并且不需要向通用基础添加不必要的构造函数?

最佳答案

为什么不直接使用

template <std::size_t size>
struct MyArrayWithFunctions : std::array<int, size> {
/* some functions */
};

std::array 允许聚合初始化,甚至可以推断出大小,以便您可以简单地编写

MyArrayWithFunctions arr{1,2,3};

你可以为自己的类添加推导准则,但为什么要重新实现array

关于c++ - 向专门的模板类添加新的构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72898843/

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