static_assert

ⓟrogramming/C++ 2016. 5. 10. 15:46
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
예제1)
#include 
using namespace std;
#pragma pack(1) // 구조체를 1바이트 단위로 정렬해 달라.
                // 컴파일시에 옵션으로 지정해도 됩니다.
struct Pack
{
    char cmd;
    int data;
};

static_assert(sizeof(Pack) == sizeof(char) + sizeof(int),
    "unexpected padding added!!");

int main()
{
    cout << sizeof(Pack) << endl; // 5
}
예제2)
#include 
#include 
using namespace std;

template
void logTime(F f, T arg)
{
    static_assert (is_function::value, "1st parameter must be function!!");
    f(arg);
}

int main()
{
    int n = 0;
    logTime(n, n);
}
예제3)
#include 
#include 
using namespace std;

class Test
{
    int data;
public:
    virtual void foo() {}
};

template void safe_memset(T& obj)
{
    static_assert(!is_polymorphic::value, "error, T has virtual function");
    memset(&obj, 0, sizeof(obj));
}

int main()
{
    Test t;

    // class도 memset을 해도 되지만 가상함수가 있으면 가상함수 테이블도 모두 초기화가 되기 때문에 memset을 하면 안된다.
    //memset(&t, 0, sizeof(t));
    safe_memset(t);

    // t의 모든 멤버를 0으로 초기화 하고 싶다.
    t.foo();

    Test* p = &t;
    p->foo(); // runtime error
}

'ⓟrogramming > C++' 카테고리의 다른 글

임시객체  (1) 2016.05.11
rvalue  (0) 2016.05.11
부분전문화(partial specialization) template  (0) 2016.05.10
Inserting object to C++11 vector without copy constructor  (0) 2015.08.29
비쥬얼 스튜디오 단축키  (0) 2014.10.27
블로그 이미지

뚱땡이 우주인

,