gpt4 book ai didi

c++函数返回模板类型检查

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

我已经通读了这里的一些问题,但找不到与我的问题相关的任何内容,所以我不知道我的做法是完全错误的,还是只是遗漏了一些特定的内容。

我想做的是标记一些数据并将其输入到函数中,并根据读入的数据将数据作为特定类型返回,或者如果输入验证失败则返回 bool false。我有超过 20 个 .cpp 和 20 个 .h 文件,所以我只会在这里发布相关部分,希望这足够了......

#include "utility1.h"
#include <fstream>
#include <boost/tokenizer.hpp>

using namespace std;
using namespace boost;


string buffer;

template <class T>
bool loadStaff(char* staffName) {

ifstream staffFile;
T data;
int datapos = 0;

staffFile.open(staffName, ios::in);

if (!staffFile.is_open()) {
cout << "Cant open file: " << staffName << endl;
return false;
}

while (staffFile.good()) {
getline(staffFile, buffer);
tokenizer<> tok(buffer);

for (tokenizer<>::iterator pos=tok.begin(); pos!=tok.end(); ++pos) {
data = validate(datapos, *pos);
// want to type check 'data' here
}
}

staffFile.close();
return true;
}

template <class T>
T validate(int datapos, string token) {

switch(datapos) {

case 0:
if (sizeof(token) != 2)
return false;
else
return token;
break;
}
}

那我该怎么办呢?会类型转换工作?或者不会,因为它可能会更改数据类型而不是检查它是什么数据类型。

对于第一次检查,我想检查 validate 是否返回 bool false 然后导致错误(稍后将更改为 try 和 catch 语句,但现在只想让它工作。

非常感谢任何帮助,提前致谢。 :)

最佳答案

这里的问题是编译器需要在编译时知道每个表达式的类型,而您正试图创建一个返回类型仅在运行时才知道的函数。

而是为您要返回的所有类型创建一个基类并返回一个指向它的指针(这样虚拟方法就可以工作)。

如果您还想在验证失败时返回 bool 值,您可以返回例如 std::pair<bool, base_token *>其中第一项表示验证是否成功,如果是,则第二项是有效指针。

关于c++函数返回模板类型检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30148546/

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