C ++函数模板导致错误的输入参数

时间:2012-05-31 00:27:05

标签: c++ function templates c++11 arguments

我如何创建一个在其自身内使用模板而不在其参数中使用模板的函数?我有很多具有相同构造函数和函数的类,但是在它们的构造函数中做了不同的事情,所以我试图创建一个可以接受数字的函数(这是必要的)来告诉交换机模板化值应该变成哪个函数。我该怎么做?

将模板放在函数中而不是模板化函数本身也不起作用

this不起作用

#include <iostream>

template <typename T> void function(uint8_t s, std::string str1, std::string str2, std::string str3){
        T var;
        switch (s){
            case 1:
                // var = class1();
                break;
            // case 2 ...
            // case 3 ...
            default:
                break;
        }
}

int main() {
        std::string str = "01234567";
        std::cout << function(1, str, str, str) << std::endl;

        return 0;
}

1 个答案:

答案 0 :(得分:3)

您是否尝试过明确指定模板参数?

function<uint8_t>(1, str, str, str);

编辑: 不可能完全按照您的意愿执行,因为模板在编​​译时被解析,但函数的参数在运行时被解析。因此,在编译期间,编译不知道's'的值是什么。

为了您的目的,我认为工厂模式是合适的。 See Alexandrescu's factory method pattern

样本用法:

typedef AbstractT* (*CreatorMethod)(std::string, std::string, std::string);
typedef Factory <AbstractT,uint8_t,CreatorMethod> TFactory;

TFactory tfact;

tfact.Register(1, &someCreatorMethod);
tfact.Register(2, &someOtherCreatorMethod);

std::string str = "01234567";

AbstracT* object = tfact.Create(1 str, str, str);
AbstracT* object = tfact.Create(2 str, str, str);