C++ 通过多个函数传递模板参数

C++ Pass template argument through multiple functions

本文关键字:参数 函数 C++      更新时间:2023-10-16

考虑这些代码行。当我尝试编译编译器时,将显示类似'a' is not a member of 'DataType1'的错误。我了解编译器如何将这些视为错误,但是有什么方法可以避免这种或其他有效的方法吗?

struct DataType1 { public: int x; };
struct DataType2 { public: int a; };
template <class E>
bool job2(E* newData, const int i){
int something = 2;  
if (i == 1) newData->x = something;
if (i == 2) newData->a = something;
}
template <class E>
bool job1(List<E>* dataBase){
E* newData = new E;
job2(newData, 1);
dataBase->push_back(newData);
}
template <class E>
int main(){
List<DataType1>* dataBase = new List<DataType>;
job1(dataBase);
}

如果你手头有 C++17,你可以写:

template <class E>
bool job2(E* newData){
int something = 2;  
if constexpr (std::is_same_v<E, DataType1>) 
newData->x = something;
else 
newData->a = something;
}

并完全丢弃i(如果您仅使用它来区分类型(。

另外,什么反对简单地重载你的函数?

bool job2(DataType1* newData){
commonOperation();
newData->x = something;
}
bool job2(DataType2* newData){
commonOperation();
newData->a = something;
}

其中commonOperation是函数共有的所有内容。