gpt4 book ai didi

c++ - 模板不够灵活,重载导致代码重复怎么办

转载 作者:行者123 更新时间:2023-11-27 23:54:49 24 4
gpt4 key购买 nike


就像标题一样。我发现自己的情况是模板不够灵活,函数重载导致代码重复。


让我展示一些代码:

// header.h:

inline void some_func(const unsigned int size, int * arr_1, int * arr_2) {

// block of code #1.
// -- This block is identical in every overloaded instance of this function

// Single line of code:
// -- This line is DIFFERENT in every overloaded instance of this function
int4 val = reinterpret_cast<int4*>(arr_1)[i];

// block of code #2.
// -- This block is identical in every overloaded instance of this function
}

inline void some_func(const unsigned int size, float * arr_1, float * arr_2) {

// block of code #1.
// -- This block is identical in every overloaded instance of this function

// Single line of code:
// -- This line is DIFFERENT in every overloaded instance of this function
float4 val = reinterpret_cast<float4*>(arr_1)[i];

// block of code #2.
// -- This block is identical in every overloaded instance of this function
}

template <typename T> inline
void some_func_warper(T * arr_1, T * arr_2) {

// Calculate few parameters...

// Call some_func(***)

}

如您所见,因为我正在向量化我的输入数组 arr_1arr_2,所以我无法为 some_func(***)。我只能重载它,这迫使我复制两个巨大的代码块……
some_func_warper(***) 的情况下,由于显而易见的原因,使用模板会产生误导。因此我也想避免使用这个 warper。

问题 #1:
有没有办法做这样的事情:
“编写函数模板并专门化该模板中的一行”??

问题 #2:
我很确定问题 #1: 的答案是
因此,对于这种情况还有其他解决方法吗?

最佳答案

使用两个模板。一个保存通用的 some_func 代码,一个专门用于该行中使用的类型。如果您在多个地方进行这种矢量化,您可能会发现可以使用一个特征类来定义类型,然后在多个模板函数中使用它。

template<class T>
class some_func_val_type;

template<>
class some_func_val_type<int> {
using type = int4;
};

template<>
class some_func_val_type<float> {
using type = float4;
};

template<class T>
inline void some_func(const unsigned int size, T * arr_1, T * arr_2) {

// block of code #1.
// -- This block is identical in every overloaded instance of this function

// Single line of code:
typename some_func_val_type<T>::type val =
reinterpret_cast<typename some_func_val_type<T>::type*>(arr_1)[i];

// block of code #2.
// -- This block is identical in every overloaded instance of this function
}

关于c++ - 模板不够灵活,重载导致代码重复怎么办,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43302224/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com