这个std :: decay的实现是正确的吗?
void main (void) {
while(1) {
if (!! Device A needs Service) {
!! Handle Device A
}
if (!! Device B needs Service) {
!! Handle Device B
}
. . . .
if (!! Device D needs Service) {
!! Handle Device D
}
UpdateLCD();
}
}
我问,因为我遇到的所有内容都使用了一些模板分支来仔细操作类型,而这似乎只是按照定义行事。
答案 0 :(得分:6)
形成这样的函数调用需要传递值,这需要复制/移动构造函数。这种实现不够通用。
这是std::decay
所做的要点。
答案 1 :(得分:4)
不,由于Potatoswatter给出的原因,这是不正确的。除了要求复制/移动构造函数按值返回之外,您根本不能按值返回某些类型:
#include <type_traits>
template<class T>
T DecayType(T);
template<class T>
struct decay {
using type = decltype(DecayType(std::declval<T>()));
};
struct abstract { virtual void f() = 0; };
static_assert(std::is_same<decay<abstract&>::type, abstract>::value, "");
struct incomplete;
static_assert(std::is_same<decay<incomplete&>::type, incomplete>::value, "");
struct immortal { ~immortal() = delete; };
static_assert(std::is_same<decay<immortal&>::type, immortal>::value, "");