为什么<>中写 没有写东西:template<> bool myCompare<Person>(Person& p1, Person& p2) { if (p1.m_Name == p2.m_Name && p1.m_Age == p2.m_Age) { return true; } else { return false; } }
时间: 2024-03-25 16:41:33 浏览: 11
在函数模板具体化的语法中,可以省略模板参数类型,编译器会自动根据函数参数类型来推导模板参数类型。因此,下面的代码也是正确的:
```c++
template<>
bool myCompare(Person& p1, Person& p2) {
if (p1.m_Name == p2.m_Name && p1.m_Age == p2.m_Age) {
return true;
} else {
return false;
}
}
```
这里的 `myCompare` 是针对 `Person` 类型的具体化版本,编译器会根据函数参数类型 `Person&` 推导出模板参数类型。因此,`<>` 中可以省略模板参数类型。
相关问题
为什么<>中写 class Person 会报错:template<> bool myCompare<Person>(Person& p1, Person& p2) { if (p1.m_Name == p2.m_Name && p1.m_Age == p2.m_Age) { return true; } else { return false; } }
在函数模板具体化的语法中,`<>` 内应该写上模板参数类型,而不是类名。因此,正确的语法应该是:
```c++
template<>
bool myCompare<Person>(Person& p1, Person& p2) {
if (p1.m_Name == p2.m_Name && p1.m_Age == p2.m_Age) {
return true;
} else {
return false;
}
}
```
这里的 `Person` 是模板参数类型,用于指定具体化版本针对的类型。注意,`Person` 前面需要加上 `typename`,否则编译器会把 `Person` 当作一个成员变量或成员函数名。
error: use of deleted function ‘std::atomic<bool>::atomic(const std::atomic<bool>&)’ std::atomic<bool> m_BConnectStutas = false; 为什么报错
这个错误是由于 `std::atomic<bool>` 类型的拷贝构造函数被删除(deleted)导致的。`std::atomic` 类型是为了实现原子操作而设计的,它们通常不支持拷贝和赋值操作,以确保线程安全。相反,你应该使用 `std::atomic<bool>` 的默认构造函数来初始化它。
这样写会解决问题:
```cpp
std::atomic<bool> m_BConnectStatus(false);
```
或者在 C++11 之前的标准中,你可以使用普通的 `bool` 类型变量,并使用 mutex 或其他同步机制来保护它的访问。
如果你需要对 `std::atomic<bool>` 进行拷贝或赋值操作,你可以考虑使用 `std::atomic_ref` 类型,它在 C++20 中引入。这样做可以避免拷贝构造函数被删除的问题。