如何在模板函数中使用不同的结构作为模板参数?

对象未知

我正在编写这样的模板函数:

template<typename T>
std::string EncodeData(int DataType, T Data, std::string ReadCommandID, std::string& ThisID);

T我想使用的类型是一些不同的结构,例如:

struct A
{
    int A_data;
    bool A_data_2;
    // etc.......
};

struct B
{
    double B_data;
    char B_data_2;
    // etc.......
};

我希望函数可以访问不同的成员变量取决于不同的struct传递给T,所以我写了这样的代码:

template<typename T>
std::string EncodeData(int DataType, T Data, std::string ReadCommandID, std::string& ThisID)
{
    if(std::is_same<T, A>{})
    {
        // Do something with Data.A_data and Data.A_data_2
    }
    else if(std::is_same<T, B>{})
    {
        // Do something with Data.B_data and Data.B_data_2
    }
    // other code.
}

并使用它:

A data={100,false};
std::string id;
std::string result = EncodeData<A>(0,data,"read_id_xxxxxxxx",id);

但是当我编译它时,发生了以下错误:

error C2039: "B_data": is not a member of "A".    
error C2039: "B_data_2": is not a member of "A".

我怎样才能解决这个问题?或者我还能做些什么来在一个函数中解决这个问题?

PS我正在使用 MSVC 编译器(Visual Studio 2019)

济州

我还能做些什么来在一个单一的功能中解决这个问题

这在编译器下是不可能的但是,在 C++17 中,您必须if constexpr这样做:

template<typename T>
std::string EncodeData(int DataType, T const& Data, std::string const& ReadCommandID, std::string& ThisID)
{
    if constexpr (std::is_same_v<T, A>)
    {
        // Do something with Data.A_data and Data.A_data_2
    }
    else if constexpr (std::is_same_v<T, B>)
    {
        // Do something with Data.B_data and Data.B_data_2
    }
}

对于 C++11,您仍然需要两个函数。因此,我建议为每个函数重载一个函数,这可能比使用模板更具可读性。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在C中使用不同的变量作为函数参数?

如何在Django模板中使用两个表单,以及如何在提交表单时调用不同的函数

如何在Nim中使用不同的参数缓存函数?

如何在std :: bind中使用模板函数参数?

如何根据模板类型参数调用不同的函数?

sizeof childclass 如何在父模板类中使用子类作为模板参数?

如何使用不同的模板作为输入定义功能

如何使用模板模板类型作为函数参数?

在模板函数中使用boost :: optional参数作为参数

使用模板化结构作为构造函数参数

如何在Golang中使用不同的界面在一个网页中执行多个模板?

如何在类外的签名中使用模板参数的嵌套类型定义模板类函数

如何在模板中使用 std 函数?

如何在Helm for Kubernetes中循环使用不同的模板?

如何在自己的结构中使用模板类的结构?

C++:在模板函数中使用模板参数作为默认参数

在另一个函数中使用模板函数作为模板参数

使用任意函数作为模板参数参数

使用函数参数作为模板参数

如何用不同的枚举定义不同的模板结构

如何在天蓝色管道中使用模板作为参数

如何在类名称空间中使用常量作为数组和模板参数?

如何在类中使用选择参数作为 Django 模板中单选输入的值

是否可以使用不同的枚举类型作为非类型模板参数

如何使用非静态成员函数作为模板参数?

模板类型推导如何使用重载函数作为参数

如何使用通用函数指针作为模板参数?

const函数指针类型作为模板参数的“无效使用不完整类型”

如何给模板数组作为函数中的参数?