在定义之前声明一个未定义的 std::function 的目的是什么?
What is the purpose of declaring an undefined std::function before its definition?
正如 cppreference.com 所引用的std::function,std::function
的实现是在定义之前声明一个未定义的std::function
。宣布这一点的目的是什么?它与模板可变参数类有关吗?
此定义用于允许类的专业化。因此,如果您尝试声明
std::function<ClassType> function;
您会收到编译时错误,这意味着未定义此参数的std::function
,它仅针对std::function<ReturnType(Args)>
在引用的链接中,
template< class >
class function;
是类模板声明。第二部分
template< class R, class... Args >
class function<R(Args...)>
是一种部分专业化,如果没有第一部分的无限制声明,它就不可能存在。
相关文章:
- 未定义的引用,尽管存在符号,但 std::experimental::可选
- 体系结构x86_64的未定义符号:std:terminate(),typeinfo,运算符delete[],运算符new
- 对 'std::thread::_M_start_thread CMake 的未定义引用进行基准测试
- 为什么从 char 转换为 std::byte 可能是未定义的行为?
- std::adjacent_find(last, last) 是未定义的吗?
- 从 std::string 到 std::array<char,size> 的 memcopy 额外数据是否是一种未定义的行为?
- C++ std::vector<int> 体系结构的未定义符号 x86_64:
- 将结构 std::memcpy 转换为具有足够容量的 std::vector 是未定义的行为<char>吗?
- std::rethrow_exception(nullptr) 未定义的行为还是bad_exception?
- 包括"lvtocon.h",未定义对'operator<<(std::ostream&, char const*)的引用
- 未定义模板"std::__1::basic_istringstream<char, std::__1::char_traits<char>, std::__1::allocator&
- 递减 std::vector::begin 是否未定义,即使它从未被使用过?
- 是std::memcpy在不同的可复制类型之间的未定义行为
- 移动 std::bitset<N> 是否超过 N 个位置未定义的行为?
- 为什么 std::memcpy(作为类型双关语的替代方案)不会导致未定义的行为?
- C++ CMake 构建错误:未定义对"boost::throw_exception(std::exception const&)"的引用
- "unix" C++预处理器宏未定义 -std=c++11
- 未定义对运算符的引用!= 使用 std::unordered_set 时
- 未定义模板'std::__1::function<int (double, double, double, double)>'的隐式实例化
- 架构x86_64的未定义符号链接constexpr std :: array