Font型の宣言・初期化について
四方山 2015/04/22(Wed) 22:31
四方山 2015/04/23(Thu) 08:40
Reputeless 2015/04/23(Thu) 10:01
コンパイルエラーにならないため気付きにくいのですが、コードの誤りです。
↑の font(50) は Font::operator() であり、
フォントのサイズを決めるコンストラクタ呼び出し Font::Font(int) にはなっていません。
Font::operator() は
font(L"Hello").draw() や
font(30, L"秒").draw() や
font(50).draw() のように、テキストとして描くものを指定するときに使われます。
このようなクラスでメンバの Font のコンストラクタを呼びたい場合は
[A] クラスコンストラクタの初期化リストを使う
class Widget
{
public:
Widget()
: m_font(50)
{
}
void draw() const
{
m_font(L"Test").draw();
}
private:
Font m_font;
};
[B] オブジェクトを作って代入する
class Widget
{
public:
Widget()
{
m_font = Font(50);
}
void draw() const
{
m_font(L"Test").draw();
}
private:
Font m_font;
};
の 2 通りの方法があります。
[A] のほうが [B] よりも少し効率的です。