비트연산자를 통한 프로퍼티 구현
2008/02/29 22:53
HINSTANCE hInstance = (HINSTANCE)GetWindowLongPtr(m_hWnd, GWLP_HINSTANCE);이런종류에서 나타나는 warning을 어떻게 없앨까?
#pragma warning( disable : 4312 )
HINSTANCE hInstance = (HINSTANCE)GetWindowLongPtr(m_hWnd, GWLP_HINSTANCE);
#pragma warning( default : 4312 )
class Widget;
template <template <typename T> class TemplateParam>
class TTP
{
TemplateParam<Widget> a;
};
template < typename T >
class TemplateParamA
{
};
class TemplateParamB
{
};
int main(int argc, char* argv[])
{
TTP<<emplateParamA> a;
//TTP<TemplateParamB> b; //compile error!
return 0;
}
class manager;
class managedInterface
{
friend class manager;
public:
managedInterface()
{
assert( CREATE_TEST == READY_TO_CREATE );
}
private:
enum CREATE_TEST_TYPE
{
READY_TO_CREATE = 0,
NEED_TO_SET
};
enum { MANAGED = 1 };
static CREATE_TEST_TYPE CREATE_TEST;
protected:
// 추상
virtual void OnCreate() = 0;
};
// 할당이 아닌 초기화를 위해서는 반드시 앞에 타입을 붙여준다.
managedInterface::CREATE_TEST_TYPE managedInterface::CREATE_TEST = managedInterface::NEED_TO_SET;
class managedImpl : public managedInterface
{
public:
// 속성
// managedImpl 하고 싶은것들
void runAndGun(){}
private:
// 구현
virtual void OnCreate(){}
};
class manager
{
public:
template
T* getManaged()
{
managedInterface::CREATE_TEST = managedInterface::READY_TO_CREATE;
T* pType = new T;
assert(T::MANAGED);
managedInterface::CREATE_TEST = managedInterface::NEED_TO_SET;
return pType;
}
static manager& getInstance()
{
static manager a;
return a;
}
};
int main()
{
//이렇게 하면 어써션이 뜬다.
//managedImpl* p = new managedImpl;
//이렇게 하면 어써션이 안뜬다.
managedImpl* p = manager::getInstance().getManaged();
managedImpl* pp = manager::getInstance().getManaged();
// 다시 이렇게 하면 어써션이 뜬다.
//managedImpl* pp = new managedImpl;
return 0;
}
IDLE 1.2
>>> a = ["hi" , "there"]
>>> a
['hi', 'there']
>>> [b, c] = a
>>> b
'hi'
>>> c
'there'
>>> a
['hi', 'there']
>>> [b] = a
Traceback (most recent call last):
File "", line 1, in
[b] = a
ValueError: too many values to unpack
>>>