13日のログで、「コード弄るんじゃなかった…orz」と書き込んでいましたが、今日になってようやく出口が見えてきましたっ。今更かよ!! って感じですが、最近は曲の打ち込みばかりで、コーディングは全くやってなかったですからねぇ…。気づいたら2週間も経ってますね……あぅあぅ。orz
で、コーディングしていて1つ勉強になったこと。
概略で書いてしまいますが…
typedef const UINT CUINT;
typedef const SVertex CSVertex;
class CVertexBuff
{
public:
template<UINT N>
void Assign(CSVertex (&s)[N], CUINT nOffset = 0); // f1
void Assign(CSVertex* pVArray, CUINT nArraySize, CUINT nOffset = 0); //f2
};
SVertex s[4] = {...}; // 適当に頂点初期化
CVertexBuff vb;
for(UINT i = 0; i < 10; ++i)
vc.Assign(s, i * 4); // ※
こんなコードは駄目ということを学習しました。^^;
私としては、※でf1を呼びたかったのですが、どうもf2を呼び出しちゃうみたいです。コンパイルエラーもなしに。確かに動いているところを見ると、f2が呼ばれてしまうのも納得なんですけど、私としてはf1を呼びたいので…。う〜ん、どう対策しようかなぁ〜……。
ちなみにですが、
template<UINT N>
int Func(int (&na)[N]);
ってのは、Nに配列のサイズが勝手に入ってくれますので、いちいち配列のサイズを引数に持たなくて良いというテンプレート関数の書き方です。私的には中々便利だと感じていますので、オススメしたいところです。
なお、VC6じゃ動きません。^^;