traitsテクノロジーの詳細
2241 ワード
STLテンプレートライブラリはソフトウェアの多重化を強調し,traits技術は採用の重要な手段である.traitsは異なるクラスの共通性を抽出し,統一的に処理できるようにした.traits技術は,表示テンプレートの特殊化によりコード中のタイプによって変化するセグメントをドラッグし,統一されたインタフェースで包装する.このインタフェースには、埋め込みタイプ、メンバー関数、メンバー変数など、C++クラスに含まれるものを含めることができます.お客様のテンプレートコードとして、traitsテンプレートクラスに公開されているインタフェースを使用して簡単にアクセスできます.
例:整形配列クラスCIntArray、浮動小数点配列クラスCFLoatArray、整形または浮動小数点配列の和に対応する倍数を乗じて出力します.コードは次のとおりです.
実行結果は次のとおりです.
上のコードを解析することでCintArray,CFLoatArrayの機能は類似しており,main関数ではいずれも2つのクラスのGetSum関数を呼び出すことで完了する.このような機能は、クラスのインタフェースを設計することによって達成することができる.
プログラムの実行結果は次のとおりです.
上のコードを解析することでCintArray,CFLoatArrayの機能は類似しており,main関数ではいずれも2つのクラスのGetSum関数を呼び出すことで完了する.このような機能は、クラスのインタフェースを設計することによって達成することができる.入出力パラメータのタイプの違いをどのように解決しますか?これは本稿で紹介するtraits技術が必要です.
例:整形配列クラスCIntArray、浮動小数点配列クラスCFLoatArray、整形または浮動小数点配列の和に対応する倍数を乗じて出力します.コードは次のとおりです.
#include "stdafx.h"
#include
using namespace std;
class CIntArray
{
int a[10];
public:
CIntArray()
{
for(int i = 0;i < 10;i++)
{
a[i] = i+1;
}
}
int GetSum(int times)
{
int sum=0;
for(int i=0;i<10;i++)
{
sum+=a[i];
}
return sum*times;
}
};
class CFloatArray
{
float f[10];
public:
CFloatArray()
{
for(int i=1;i<=10;i++)
f[i-1]=1.0f/i;
}
float GetSum(float times)
{
float sum=0.0f;
for(int i=0;i< 10;i++)
{
sum+=f[i];
}
return sum*times;
}
};
int _tmain(int argc, _TCHAR* argv[])
{
CIntArray intary;
CFloatArray fltary;
cout<
実行結果は次のとおりです.
上のコードを解析することでCintArray,CFLoatArrayの機能は類似しており,main関数ではいずれも2つのクラスのGetSum関数を呼び出すことで完了する.このような機能は、クラスのインタフェースを設計することによって達成することができる.
#include "stdafx.h"
#include
using namespace std;
class CIntArray
{
int a[10];
public:
CIntArray()
{
for(int i = 0;i < 10;i++)
{
a[i] = i+1;
}
}
int GetSum(int times)
{
int sum=0;
for(int i=0;i<10;i++)
{
sum+=a[i];
}
return sum*times;
}
};
class CFloatArray
{
float f[10];
public:
CFloatArray()
{
for(int i=1;i<=10;i++)
f[i-1]=1.0f/i;
}
float GetSum(float times)
{
float sum=0.0f;
for(int i=0;i< 10;i++)
{
sum+=f[i];
}
return sum*times;
}
};
template
class CApply
{
public:
float GetSum(T& t,float inpara)
{
return t.GetSum(inpara);
}
};
int _tmain(int argc, _TCHAR* argv[])
{
CIntArray intary;
CFloatArray fltary;
CApply c1;
CApply c2;
cout<
プログラムの実行結果は次のとおりです.
上のコードを解析することでCintArray,CFLoatArrayの機能は類似しており,main関数ではいずれも2つのクラスのGetSum関数を呼び出すことで完了する.このような機能は、クラスのインタフェースを設計することによって達成することができる.入出力パラメータのタイプの違いをどのように解決しますか?これは本稿で紹介するtraits技術が必要です.