Lang/C++/template
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
]
開始行:
#topicpath
/////////////////////////////////////////////////////////...
* 目次 [#o6c272be]
#contents();
/////////////////////////////////////////////////////////...
* template とは [#t6ecd090]
- 関数やクラスの、「一部又は全ての型が異なるが同じ処理」...
- template には、関数テンプレートとクラステンプレートがあ...
//=======================================================...
** 関数テンプレート [#zdd037fd]
//-------------------------------------------------------...
*** 可変長引数テンプレート [#w2b7ed06]
- テンプレート自体を可変長引数とすることも出来る。
- テンプレート自体を可変長引数とする場合、下記のように記...
template<typename ... Args>
-- ここで、テンプレートパラメータを宣言する typename (又...
-- 可変長引数テンプレートで宣言したパラメータ(ここでは t...
// 0個以上のテンプレートパラメータを受け取る
template <typename ... Args>
class hoge_t {
public:
hoge_t();
void set(Args ... args);
};
// 0個以上の任意の型のパラメータを受け取る
template <typename ... Args>
void f(Args ... args);
- 例
template <typename ... Args>
std::string format( const std::string& fmt, Args ... arg...
{
size_t len = std::snprintf( nullptr, 0, fmt.c_str(),...
std::vector<char> buff( len + 1 );
std::snprintf( &buff[0], len + 1, fmt.c_str(), args ...
return std::string( &buff[0], &buff[0] + len );
}
//=======================================================...
** クラステンプレート [#n744af20]
/////////////////////////////////////////////////////////...
* テンプレートの特殊化 [#b0472eef]
//=======================================================...
** テンプレートの定義をソースに記述した場合 [#mbbc3b67]
- テンプレートの定義を書いたソース内でしかそのテンプレー...
- 宣言をヘッダに、定義をソースに書いた場合で、他のソース...
template<typename T>
class Position {
public:
Position(T x, T y, T z);
<snip>
};
// 下記のように、型の適用を明示することを「template のイ...
template class Position<uint16_t>;
template class Position<uint32_t>;
終了行:
#topicpath
/////////////////////////////////////////////////////////...
* 目次 [#o6c272be]
#contents();
/////////////////////////////////////////////////////////...
* template とは [#t6ecd090]
- 関数やクラスの、「一部又は全ての型が異なるが同じ処理」...
- template には、関数テンプレートとクラステンプレートがあ...
//=======================================================...
** 関数テンプレート [#zdd037fd]
//-------------------------------------------------------...
*** 可変長引数テンプレート [#w2b7ed06]
- テンプレート自体を可変長引数とすることも出来る。
- テンプレート自体を可変長引数とする場合、下記のように記...
template<typename ... Args>
-- ここで、テンプレートパラメータを宣言する typename (又...
-- 可変長引数テンプレートで宣言したパラメータ(ここでは t...
// 0個以上のテンプレートパラメータを受け取る
template <typename ... Args>
class hoge_t {
public:
hoge_t();
void set(Args ... args);
};
// 0個以上の任意の型のパラメータを受け取る
template <typename ... Args>
void f(Args ... args);
- 例
template <typename ... Args>
std::string format( const std::string& fmt, Args ... arg...
{
size_t len = std::snprintf( nullptr, 0, fmt.c_str(),...
std::vector<char> buff( len + 1 );
std::snprintf( &buff[0], len + 1, fmt.c_str(), args ...
return std::string( &buff[0], &buff[0] + len );
}
//=======================================================...
** クラステンプレート [#n744af20]
/////////////////////////////////////////////////////////...
* テンプレートの特殊化 [#b0472eef]
//=======================================================...
** テンプレートの定義をソースに記述した場合 [#mbbc3b67]
- テンプレートの定義を書いたソース内でしかそのテンプレー...
- 宣言をヘッダに、定義をソースに書いた場合で、他のソース...
template<typename T>
class Position {
public:
Position(T x, T y, T z);
<snip>
};
// 下記のように、型の適用を明示することを「template のイ...
template class Position<uint16_t>;
template class Position<uint32_t>;
ページ名: