C ++函数将int返回给字符串变量

时间:2016-05-10 18:52:05

标签: c++

我有一个生成随机数的函数。问题是我在模板类中使用它,其中T可以是int或string。当我选择字符串时,我收到有关无法转换的错误。如何返回一个整数并根据模板类型将其分配给字符串?

CTable(){
    for (int i = 0; i < 10; i++){
        int row = GenerateNumber();
        int col = GenerateNumber();
        T value = GenerateNumber(); //problem here when T is string
        CCellDescr c(row, col, value);
        cells.push_back(c);
    }
}

int GenerateNumber(){
    int number = rand() % 10 + 1;
    return number;
}

2 个答案:

答案 0 :(得分:8)

您可以创建一个帮助程序模板来执行转换,并将其专门化为T类型。例如:

示例代码

#include <iostream>
#include <string>

int GenerateNumber()
{
    int number = rand() % 10 + 1;
    return number;
}

template<typename T>
T convert(int value)
{
    return value;
}

template<>
std::string convert(int value)
{
    return std::to_string(value);
}

template<typename T>
class CTable
{
public:
    CTable()
    {
        for (int i = 0; i < 10; i++)
        {
            int row = GenerateNumber();
            int col = GenerateNumber();
            T value = convert<T>(GenerateNumber());
            std::cout << "'" << value << "'\n";
        }
    }
};

int main()
{
    CTable<std::string> table;

    return 0;
}

示例输出

'8'
'6'
'10'
'8'
'4'
'7'
'2'
'10'
'3'
'6'

Live Example

答案 1 :(得分:0)

您还可以专门化模板化函数以不同方式处理字符串

#include <cstdlib>
#include <string>

template<class T>
class CTable
{
public:
    CTable();
};

从类中删除了构造函数的定义。通常情况下,我对此有所了解,因为你获得了比分离模板定义和实现所带来的好处更多的可能性,但这里有效。

int GenerateNumber()
{
    int number = rand() % 10 + 1;
    return number;
}

生成数字功能不变。

std::string randomStrings[] = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9" };

template<>
CTable<std::string>::CTable()
{
    std::string value = randomStrings[GenerateNumber()]; 
}

string的模板构造函数实现。这使用随机数作为字符串数组的索引。不是超级随机,但它得到了重点。

template<class T>
CTable<T>::CTable()
{
    T value = GenerateNumber(); 
}

其他一切的模板构造函数实现。

class foo
{

};

快速课程,演示如何使这个解决方案失败。

int main()
{
    CTable<int> a;
    CTable<std::string> b;
    CTable<foo> c; // awwww shoot. Need protection from foos too. 
}

快速main尝试全部。