gpt4 book ai didi

c++ - 如何使用模板类型的 vector ?

转载 作者:行者123 更新时间:2023-11-30 01:53:52 25 4
gpt4 key购买 nike

我想要两个模板结构,用于将任何 Variant 类型转换为 std::strings ;

当第一个编译时,第二个不会编译,在 vector<Variant>::iterator statement .编译器说:

error: expected ';' after expression

vector<Variant>::iterator i = data.begin();

知道我做错了什么吗?对于我在这里尝试做的事情,有没有更好的方法?

template <typename Variant>
struct to_string
{
private:
Variant data;

public:
to_string(Variant &d) : data(d) {}
operator std::string() const
{
try
{
return boost::lexical_cast<std::string>(data);
}
catch (const boost::bad_lexical_cast &)
{
return std::string();
}
}

};

template <typename Variant>
struct to_string_vector
{
private:
vector<Variant> data;
public:
to_string_vector(vector<Variant> &d) : data(d) {}
operator vector<std::string> () const
{
vector<string> ret;
vector<Variant>::iterator i = data.begin();
to_string t_s<Variant> s = to_string<Variant>(*i);
ret.push_back((string)s);
return ret;
}
};

最佳答案

你需要

typename vector<Variant>::iterator

当访问在模板类型范围内定义的子类或 typedef 时,编译器会感到困惑,需要帮助将它们识别为类型。

编辑:(我的完整程序,修复了一些常量....注释掉了 boost 部分,因为我现在无法访问 boost...并添加了代码来实例化模板)。

#include <iostream>
#include <string>
#include <vector>

using namespace std;

template <typename Variant>
struct to_string
{
private:
Variant data;

public:
to_string(const Variant &d) : data(d) {}
operator std::string() const
{
//try
//{
//return boost::lexical_cast<std::string>(data);
//}
//catch (const boost::bad_lexical_cast &)
//{
return std::string();
//}
}

};

template <typename Variant>
struct to_string_vector
{
private:
vector<Variant> data;
public:
to_string_vector(const vector<Variant> &d) : data(d) {}
operator vector<std::string> () const
{
vector<string> ret;
typename vector<Variant>::const_iterator i = data.begin();
to_string<Variant> s = to_string<Variant>(*i);
ret.push_back((string)s);
return ret;
}
};

int main(int argc,char **argv) {

to_string<int> a(10);

string sa=(string)a;
vector<int> v;
to_string_vector<int> b(v);
vector<string> sb=(vector<string>)b;
}

关于c++ - 如何使用模板类型的 vector ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22704654/

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