私はテンプレートで遊んできましたが、関数に与えられたテンプレートタイプに特定の静的メンバーがあることを強制したいと思います。残念ながら、タイプ形質はstd::is_static
ではありません。メンバー変数がC++ 17で 'static'とマークされているというstatic_assertですか?
私はそれを使用する方法のラフな例(または代替):
template<typename T>
void SomeFunc(T& obj)
{
static_assert(std::is_static_v<decltype(T::someVariable)>, "someVariable must be static");
}
は、行動のこの種を達成するための任意の方法はありますか?私はちょうど
template<typename T>
void SomeFunc(T& obj)
{
// must be static
T::someVariable;
}
を書くことができしかし、これはまともなメッセージとstatic_assert
ほど素敵または有益近くのどこかではないでしょう。これは一種のちょうど構文エラーです:(私はあなたが望むものを正しく理解していれば
ありがとう!
もちろん、ここで得られる最も良いのは構文エラーです。コンパイラは 'T :: someVariable'を解決しようとしています。それができない場合、もちろんそれはコンパイラのエラーです。これを回避する方法はありません。 'T :: someVariable'が静的なメンバか関数かをチェックしたいなら、' type_traits'ヘッダを使います。 – nakiya
それは私の指摘でした - 私は問題を解決するためにtype_traitsを使用する方法を理解できませんでした:)しかし、max66の答えはそれをカバーするようです。 – HateDread
@HateDread - 納屋の異論は確かではありませんが、私は自分の答えを改善しました。 – max66