gpt4 book ai didi

c++ - 是否可以将字符串重载为 char 元素的 vector ?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:26:20 26 4
gpt4 key购买 nike

我有一个作用于元素列表的类,如下所示:

template <typename T>
class MyClass {
...
};

我需要实现某些方法,这些方法都适用于 vector<T>和一个 string - 这是大多数用户将对象初始化为 MyClass<char>() 时使用的内容.

因此,我被迫遵循这种重载模式:

void method(vector<T> elements){

}

void method(string elements){
method(convertStringToVector(elements));
}

哪里vector<char> convertStringToVector(string str)按预期定义。

也就是说,对于每个类方法,我都被迫添加一个额外的方法来重载 string .我发现这是一个不必要的开销,有时也会忘记添加它。

我将在字符串上做与在相应 vector 上做的完全相同的事情——在两种情况下都将调用相同的方法,相同的迭代等。因此,我想知道是否有更简洁的方法这个,没有增加太多代码开销。有吗?

最佳答案

一种可能的方法是将您的方法实现为模板,其参数不限于 stringvector<char> .

template <typename T>
struct MyClass
{
template <class C>
void method(C container);
};

这解决了您的问题,因为两种情况下一种实现就足够了:

template <typename T>
template <class C>
void MyClass<T>::method(C container)
{
std::cout << "Container has size " << container.size() << '\n';
std::cout << "First element is " << container[0] << '\n';
}

但是,这适用于任何容器。目前尚不清楚这是好事(代码是通用的)还是坏事(代码允许不需要的实例化)。

想象一下当人们尝试发送 vector<int> 时会发生什么而不是 vector<char>错误地使用了您的方法。因为您没有为这种情况构建代码,所以它要么显示模糊的编译错误,要么生成的代码在运行时默默地做错事。

关于c++ - 是否可以将字符串重载为 char 元素的 vector ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55703960/

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