【发布时间】:2019-11-15 23:12:49
【问题描述】:
我想要一个模板函数以一种特殊的方式复制数据。 如果数据元素类型大小是 4 字节的倍数,则有一种简单的方法,即 (sizeof(T) % 4 == 0):
template <typename T, typename Idx, uint32 dimensions>
void loadData4BWords(T *target, const T *source, const Idx eleCount);
如果不是这种情况,还有一种更复杂的方法来复制数组:
template <typename T, typename Idx, uint32 dimensions>
void loadDataNo4BWords(T *target, const T *source, const Idx eleCount);
如何编写一个调用者模板函数,在编译时做出这个决定并对用户透明?例如:
template <typename T, typename Idx, uint32 dimensions>
void loadData(T *target, const T *source, const Idx eleCount);
应该根据编译时条件multipleOf4BWord = (sizeof(T) % 4 == 0)调用上述两个版本之一。更准确地说,loadData 应该在编译时被翻译成上述两个版本之一。
【问题讨论】:
-
什么 C++ 版本可用?
-
GCC 7 和 MSVC 19.23 支持的交集。
标签: c++ templates template-specialization compile-time