Coding_Style - Nagarei/DxLibEx GitHub Wiki
原則小文字と_のみで、理由がない限り拡張子は.hppにする
DXLE_からはじめ、大文字と数字と_のみを使用する
DXLE_INC_(ルートから見たフォルダー名大文字)_(ファイル名大文字)_H(PP)_
のように。#pragma onceは使わない。
例:./config/config.hppだったら
#ifndef DXLE_INC_CONFIG_CONFIG_HPP_
#define DXLE_INC_CONFIG_CONFIG_HPP_
//中略
#endif //DXLE_INC_CONFIG_CONFIG_HPP_定数はconstexpr, static const, enum, enum classがあるがいずれもdxle名前空間ないしその下位の名前空間に入れる。大文字と数字と_のみを使用する
小文字を使い、_で区切る
const T& vのように書く。
const T* vのように書く。T const * const * constとかなる場合は考えない。(ポインタを使わない)
if (...) {
...
}これは守れていないことも多い。
void f()
{
//do something
}
void g(){}NRVOを阻害するので基本的には書かない。ただし戻り値がrvalue-referenceの場合を除く。
DXLE_CONSTEXPR to static_cast_if(from&& n)
DXLE_NOEXCEPT_IF_EXPR((
dxle::detail::static_cast_if_helper<to, from, do_cast>()(
std::move(std::declval<from>()))))
{
return dxle::detail::static_cast_if_helper<from, to, do_cast>()(std::move(n));
}ではなく
DXLE_CONSTEXPR to static_cast_if(from&& n)
DXLE_NOEXCEPT_IF_EXPR((
dxle::detail::static_cast_if_helper<to, from, do_cast>()(
std::move(std::declval<from>())
)
))
{
return dxle::detail::static_cast_if_helper<from, to, do_cast>()(std::move(n));
}のようにする
template<typename T, typename std::enable_if<std::is_arithmetic<T>::value, std::nullptr_t>::type = nullptr>
template<typename T, enable_if_t<std::is_arithmetic<T>::value, nullptr_t> = nullptr>このようにstd::nullptr_t型を使用する。これはstd::nullptr_t型はnullptr以外の値を取らないので、template実引数に直接値を指定されても動作に影響がでないためです。
C++ - std::enable_ifを使ってオーバーロードする時、enablerを使う? - Qiita
http://ask.fm/EzoeRyou/answer/132397333591
ただし、VS2013ではSFINAE回りにバグが多いしかないので注意。特にSFINAEでオーバーロード呼び分けはほぼ確実にバグるので、ヘルパークラスを作りtemplate部分特殊化で対応する。またalias templateで定義されているenable_if_tだとエラーになりtypename std::enable_if<>::typeと書けば大丈夫なこともある、謎い。