그의 Guru Of The Week #28 열에서 Herb Sutter는 (는) 연합을 사용하지만 Boost의 노력보다 덜 강력합니다.
부스트의 aligned_storage은 불만 사항을 해결합니다. 그 구현을 보면 MSCV의 __alignof
또는 GCC의 __alignof__
과 다른 템플릿 인 type_with_alignment
을 사용하는 것을 볼 수 있습니다. 내 자신의 코드베이스에서
, 내가 한 번 사용 (위의 GOTW 링크에서 파생) : 내가 부스트에 의존하는 단지 것
#if defined(_MSC_FULL_VER) && (_MSC_FULL_VER >= 150020706)
# pragma warning(push)
# pragma warning(disable: 4371)
#endif // #if (defined(_MSC_FULL_VER) && (_MSC_FULL_VER >= 150020706)
union AlignedStorage
{
char storage[sizeof(T)];
int16 dummy0;
int32 dummy1;
int64 dummy2;
float dummy3;
double dummy4;
long double dummy5;
void (*dummy6)();
struct dummy7;
int dummy7::*dummy8;
#if defined(_MSC_FULL_VER) && (_MSC_FULL_VER >= 140050215)
# pragma warning(push)
# pragma warning(disable: 4121)
#endif // #if (defined(_MSC_FULL_VER) && (_MSC_FULL_VER >= 140050215)
int (dummy7::*dummy9)(int);
#if defined(_MSC_FULL_VER) && (_MSC_FULL_VER >= 140050215)
# pragma warning(pop)
#endif // #if (defined(_MSC_FULL_VER) && (_MSC_FULL_VER >= 140050215)
}; // AlignedStorage
#if defined(_MSC_FULL_VER) && (_MSC_FULL_VER >= 150020706)
# pragma warning(pop)
#endif // #if (defined(_MSC_FULL_VER) && (_MSC_FULL_VER >= 150020706)
이 일이 가능성이 더 많은 코너의 경우와 컴파일러 특이성을 다루고 있기 때문에
흥미로운 질문입니다. +1 (destructor를 수동으로 치는 것을 기억함) (비록 내가'const'를 통해 어떻게 그렇게하고 있는지를 놓치고 있지만, 나는'const' 배치를 정말로 닦을 필요가있다). – WhozCraig
@WhozCraig : 감사합니다. pointee는 const가 아니며 포인터 자체는 포인터입니다. :) – Mehrdad
그래, 방금 본거야. = P –
WhozCraig