如何将两个字符串作为参数传递给C ++模板模板函数

时间:2015-04-15 22:37:58

标签: c++ string templates

以下是我正在使用的模板功能

// Function to calculate bionomial coefficient.  
template <typename TYPE>
int C(TYPE &n, TYPE &k) {    

    if (!parametersChecking(n, k)) {
        return false;
    }
    else{
        return claculateBC(n,k);
    }

}

我将两个字符串参数传递给该函数。但它说

  

错误:无法将参数'1'的'std :: string {aka std :: basic_string}'转换为'int'为'int calculateBC(int,int)'

但如果我传递intfloat类型参数,则可以正常工作。我已经尝试过stringstream,只有当两个参数都是某些文本时它才有用,但如果一个是文本而另一个是数字,则它不会返回所需的结果。

从另一个函数传递值,即

void test3_string(int testNo) {

    std::string n = "john"; std::string k = "doe";
    int pass = 0;


//  std::stringstream ss(n);
//  ss >> tempN;
//  std::cout << tempN << std::endl;

//  std::stringstream ss2(k);
//  ss2 >> tempK;
//  std::cout << tempK << std::endl;    
    pass = C(n, k);
    printStatus(pass, testNo-1);
}

所以有人可以帮助我如何将字符串传递给函数?

其他信息:

int claculateBC(int n, int k){

    int bionomial_coefficient = 1;

    if (n == k || k == 0) {
        return 1;
    }
    int nMinusK = n - k;    
    n = eachValuesFactorial(n);
    k = eachValuesFactorial(k);
    nMinusK = eachValuesFactorial(nMinusK);

    bionomial_coefficient = n / (k * nMinusK);

    return bionomial_coefficient;
}

如果有人想看看,这是完整的程序:Bionomial-Coefficient

2 个答案:

答案 0 :(得分:1)

calculateBC()仅接受int个值作为输入,并对它们执行算术运算。但是,TYPE的{​​{1}}为C(),而不是std::string。因此,您需要先将字符串值转换为整数值,然后才能调用int,例如:

calculateBC()

答案 1 :(得分:0)

您的模板化函数调用calculateBC,它只接受int个。您还需要使calculateBC成为模板函数。它仅适用于floatint,因为会发生从floatint的隐含转换。

或者,您可以在此处重新考虑您的结构,无论是在ints内转换为C(),还是在调用C()并删除模板之前。