typeidと計算コスト
今、以下のようなクラスの関数を作っているのですが、typeidはプログラム実行時に実行される関数という扱いなのでしょうか?
それとも、コンパイル時に実行されるマクロ関数的な扱いのものなのでしょうか?
もし、プログラム実行時に実行されるなら、コンパイル時にTTの種類によって内容をコンパイルする内容を変更すると言うことは不可能でしょうか?
また、どうしても、プログラム実行時にしかできないのならと考え、
type_info ty=typeid(TT)
と、代入してから判定してみようかとやってみたのですが、「error C2248: 'type_info::type_info' : private メンバ (クラス 'type_info' で宣言されている) にアクセスできません。」と表示され無理なようでした。
何か良い方法はないものでしょうか?
template<class TT> class vector3{
public:
enum{NUM=3};
TT x[NUM];
int GetMemberList(char *str,const int bufsize,char *format=0);
};
template<class TT> int vector3<TT>::GetMemberList(char *str,const int bufsize,char *format=0){
int i,j;
if(!format){
const int size=4;
type_info
format=new char[size];
if(typeid(TT)==typeid(int)){
strcpy_s(format,size,"%d");
}
else if(typeid(TT)==typeid(double)){
strcpy_s(format,size,"%lf");
}
else{
return(1);
}
}
j=sprintf_s(str,bufsize,format,x[0]);
for(i=1;i<NUM;i++){
j+=sprintf_s(str+j,bufsize-j,",");
j+=sprintf_s(str+j,bufsize-j,format,x[i]);
}
if(format)delete [] format;
return(0);
}