4

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

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

不起作用

#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;
}
4

1 回答 1

3

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

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

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

出于您的目的,我认为工厂模式是合适的。请参阅 Alexandrescu 的工厂方法模式

示例用法:

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);
于 2012-05-31T00:48:23.920 回答