C++ 不同概念的不同 using 声明

Esp*_*eon 2 c++ optimization micro-optimization c++-concepts c++20

比方说,我有我的List<T>课。我有很多函数,我必须传递我T类型的单个对象。例如

void add(const T& item)
{
    ...
}
Run Code Online (Sandbox Code Playgroud)

T如果是某个类或结构就有意义。但是,如果T是字节或整数,则通过引用传递它是没有意义的,甚至是错误的,因为内存指针花费 8 个字节(在 32 位系统上为 4 个字节),即我通过 8 字节大小的指针传递 1 字节大小的数据类型。

所以我决定使用using指令定义参数数据类型。有点儿:

using argType = const T&; requires sizeof(T) > 8
using argType = T; requires sizeof(T) <= 8
Run Code Online (Sandbox Code Playgroud)

但是,显然,这段代码不起作用。您能为我提出其他解决方案吗?

康桓瑋*_*康桓瑋 5

听起来你需要的是conditional_t

#include <type_traits>

template<class T>
class List {
  using argType = std::conditional_t<(sizeof(T) > 8), const T&, T>;
  
  void add(argType item) { }
};
Run Code Online (Sandbox Code Playgroud)