Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/142.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++函数返回字符串变量_C++ - Fatal编程技术网

C++函数返回字符串变量

C++函数返回字符串变量,c++,C++,我有一个生成随机数的函数。问题是我在一个模板类中使用它,其中T可能是int或string。当我选择字符串时,我得到一个关于不可能转换的错误。如何根据模板类型返回整数并将其分配给字符串 CTable(){ for (int i = 0; i < 10; i++){ int row = GenerateNumber(); int col = GenerateNumber(); T value = GenerateNumber(); //p

我有一个生成随机数的函数。问题是我在一个模板类中使用它,其中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;
}

您可以创建一个助手模板来执行转换,并在T类型上对其进行专门化。例如:

示例代码
您可以创建一个助手模板来执行转换,并在T类型上对其进行专门化。例如:

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

#include <cstdlib>
#include <string>

template<class T>
class CTable
{
public:
    CTable();
};
生成数字函数不变

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

template<>
CTable<std::string>::CTable()
{
    std::string value = randomStrings[GenerateNumber()]; 
}
其他所有内容的模板构造函数实现

class foo
{

};
和一个快速类来演示如何使这个解决方案失败

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

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

#include <cstdlib>
#include <string>

template<class T>
class CTable
{
public:
    CTable();
};
生成数字函数不变

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

template<>
CTable<std::string>::CTable()
{
    std::string value = randomStrings[GenerateNumber()]; 
}
其他所有内容的模板构造函数实现

class foo
{

};
和一个快速类来演示如何使这个解决方案失败

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

还有一个快速的main来尝试这一切。

我如何根据类型定义要选择哪一个?我如何根据类型定义要选择哪一个?恶魔。别这么快打字了!恶魔。别这么快打字了!