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

标签 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;
}

最佳答案

您是否尝试过显式指定模板参数?

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);

关于C++ 函数模板导致输入参数出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10826012/

相关文章:

c++ - 为什么我在使用 Boost UUID 时会收到来自 Valgrind 的未初始化值警告?

c++ - 访问 mulimap 中的元素

c++ - 用于从 ANSI 字符串转换为 std::basic_string<TCHAR> 的正确函数声明

c++ - 如何在不指定不必要的模板参数的情况下使用模板类的成员类型?

c++ - 如何在不使用 const 的情况下防止删除指针?

c++ - 如何在 C/C++ 中的 Windows 下对两个 Unicode 字符或字符串进行不区分大小写的比较?

javascript - 当 `` `type ="module"``` 或 import 时函数不工作

c - 关于如何创建一个接受字符串并返回带有日期和时间的字符串的 C 函数的想法

javascript - 为什么 'delete(arg)' 不会在函数中引发任何错误并给出输出 'myVar' ?

javascript - Python Flask 模板使用 {{}} 不能混合 javascript var