如何专门化字符串数组的模板?
How to specialize template for array of strings?
我尝试制作一个示例将字符串数组传递给专门的模板构造函数,但实际上我没有收到任何错误,但此示例不起作用。 我试过这样: 调用模板类构造函数:
int ia[] = { 6, 7, 8, 3 };
const sav<int> si( ia, sizeof( ia ) / sizeof( ia[ 0 ] ) );
std::string sa[] = { "World" , "Hello" };
const sav<std::string> ss( sa, sizeof( sa ) / sizeof( sa[ 0 ] ) );
在我的模板中,我有:
template<typename T>
class sav{
public:
sav(T* givenArray,size_t size) {
std::cout<<"not specialized" << std::endl;
}
};
/* ** */
template<>
class sav<std::string[]>{
public:
sav(std::string* givenArray[],size_t size) {
std::cout<<"specialized" << std::endl;
}
};
我想ss
情况下使用第二个,但这仍然适用于第一个。
那是因为当特化sav<std::string[]>
时,您使用sav<std::string>
。
专业化应该是sav<std::string>
的。
的和你的专业sav
构造函数也是错误的,因为第一个参数是指向std::string
的指针的"数组"。
如果理解您的意图,请正确声明专用构造函数:
template<>
class sav<std::string[]> {
public:
sav(std::string givenArray[], size_t size) {
std::cout << "specialized" << std::endl;
}
};
并像这样使用:
const sav<std::string[]> ss(sa, sizeof(sa) / sizeof(sa[0]));
更新:
您还可以像这样声明构造函数:
template<>
class sav<std::string> {
public:
sav(std::string* givenArray , size_t size) {
std::cout << "specialized" << std::endl;
}
};
如果要避免数组声明,请按以下方式调用它:
const sav<std::string> ss(sa, sizeof(sa) / sizeof(sa[0]));
您将模板参数指定为std::string
,而不是数组。我想你应该把模板专门化为
template<>
class sav<std::string>{
public:
sav(std::string* givenArray,size_t size) {
std::cout<<"specialized" << std::endl;
}
};
住
相关文章:
- Mongodb c++驱动程序:如何查询元素的数组
- 将数组的地址分配给变量并删除
- 从C++本机插件更新Vector3数组
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 数组索引的值没有增加
- 将对象数组的引用传递给函数
- 为char数组调整zlib-zpipe
- 2D数组来自文本输入,中间有空格
- std::向量与传递值的动态数组
- 在c++中用vector填充一个简单的动态数组
- 使用strcpy将char数组的元素复制到另一个数组
- 使用指针从C++中的数组中获取最大值
- C++使用整数的压缩数组初始化对象
- 告诉一个 const char 数组,除了编译时 C 样式的字符串外,它不以 '