template <class T, class U>
auto doEmplaceAssign(int, T& t, U&& u) -> decltype(void(t = (U &&)u)) {
t = (U &&)u;
}
普通参数,如int,double
template <class T, class U>
auto doEmplaceAssign(long, T& t, U&& u) -> decltype(void(T((U &&)u))) {
t.~T();
::new ((void*)std::addressof(t)) T((U &&)u);
}
类的参数构造
template <class T, class... Us>
auto doEmplaceAssign(int, T& t, Us&&... us)
-> decltype(void(t = T((Us &&)us...))) {
t = T((Us &&)us...);
}
函数类型构造
template <class T, class... Us>
auto doEmplaceAssign(long, T& t, Us&&... us)
-> decltype(void(T((Us &&)us...))) {
t.~T();
::new ((void*)std::addressof(t)) T((Us &&)us...);
}
类的可变参数构造
C++模板根据类型参数创建各种类型对象
于 2024-11-11 16:26:41 首次发布