c++ - 如何在 C++ 中创建通用 stringToVector 函数?

标签 c++ generics vector

我正在尝试创建一个通用的 stringToVector 函数。

输入是一个字符串,包含多个以逗号分隔的int或字符串(我们忽略char)

例如) [1, 5, 7] 或 [转换、转换为字符串、 vector ]

我想要一个像这样的通用函数

template <class T>
vector<T> stringToVector(string input) {
    vector<T> output;
    input = input.substr(1, input.length() - 2);

    stringstream ss;
    ss.str(input);
    T item;
    char delim = ',';
    while (getline(ss, item, delim)) {
        if (is_same(T, int)) {
            output.push_back(stoi(item));    // error if T is string
        } else {
            output.push_back(item);          // error if T is int
        }
    }

    return output;
}

有什么办法吗?

我知道这个函数很蠢,但我只是想用它来进行竞争性编程。

最佳答案

通常它是由辅助函数完成的:

template<class T>
T my_convert( std::string data );

template<>
std::string my_convert( std::string data )
{
    return data;
}

template<>
int my_convert( std::string data )
{
    return std::stoi( data );
}

在你的函数中:

str::string str;
while (getline(ss, str, delim))
   output.push_back( my_convert<T>( std::move( str ) ) );

它将无法编译除 std::stringint 之外的任何其他类型,但您可以添加更多 my_convert 的特化,如果您需要支持其他类型。

关于c++ - 如何在 C++ 中创建通用 stringToVector 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55814206/

相关文章:

java - 泛型、类型删除和静态结构方法

C++ 为什么迭代器在与 find 函数一起使用时表现不同?

c++ - CUDA/CUBLAS : Accessing elements in an array

c++ - 如何推导函数内部 vector 的大小? ( vector 通过指向其第一个元素的指针传递)

c++ - GDB 和 NS2 : how to stop program at some Function call

c# - 如何从 List<T> 获取 IEnumerable<T>?

generics - 我可以通过哪些不同的方式来声明对泛型类型进行操作的类型?

c - Mac OSX 上的 vector 标量乘法 AVX 段错误

c++ - 如何在 C++ 图形中打印窗口控制台字体

c++ - 我的 Firefox 扩展不工作。使用 C++ XPCOM 组件的 Firefox 扩展(XPI 文件)的结构是什么?