質問です。
クラスとして

class CHoge
{
public:
virtual int load(const char *filename)const;
};

みたいな、文字列を引数にとる仮想関数を持っているクラスを設計するときの質問です。
静的リンクライブラリとして、クラス内の実装はlibの中に隠ぺいされています。
ユーザーはもちろんオーバーライドして使ってもかまいません。

この状況なのですが、UNICODE環境の時に困りました。
MessageBox関数などが、実はマクロで
MessageBoxA
MessageBoxW
に化けるということは知っており、それを真似ようとしたのですが
loadWとloadAを作るとユーザーが2通りオーバーライドしなければならない(するべきでしょう)ので、面倒です。

となるとCHogeAとCHogeWを作り、マクロで
#define CHoge CHogeA
とかすべきなのでしょうか?

しかしそれをしたとしても、libではW版、もしくはA版しか入っていないことになるので
hogeA.lib
hogeW,lib
みたいに2通りのlibを作らなければならない気がします。

どのようにするのが正解なのでしょうか?