我在这里已经阅读了一些问题,找不到与我的问题有关的任何内容,所以我不知道我做的是完全错误的还是只是缺少特定的内容。

我想做的是将一些数据标记化,然后将其输入到函数中,并根据读取的数据返回特定类型的数据,如果输入验证失败,则返回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(boolean) bool(boolean) 假值,然后导致错误(以后将更改为try and catch语句,但现在只是想使其正常工作。

非常感谢您的任何帮助。 :)

最佳答案

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

而是为要返回的所有类型创建基类,并返回指向它的指针(以便虚拟方法起作用)。

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

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

10-11 22:59
查看更多