大きな計算ジオメトリ ライブラリがあります。カーネルに問題があります。cg::epsilon<T>()
の代わりに単純に書くために、自由関数の形式で定義されたスカラー テイトとヘルパー アクセサがありcg::scalar_traits<T>::epsilon
ます。しかし、vs2008 と vs2010 では、T
inのテンプレート パラメーターを推定できなかったと主張することがあるという問題がありますcg::epsilon<T>
。LWS の他のコンパイラでは正常に動作します。
再現する縮小版:
namespace cg
{
template<class S>
S epsilon();
template<>
double epsilon<double>() {return 1;}
template<>
float epsilon<float>() {return 1;}
template<class S>
bool eq(S a, S b, S eps = cg::epsilon<S>())
{
return true;
}
}
int main(int argc, char* argv[])
{
cg::eq(0.0, 0.0);
cg::eq(0.0f, 0.0f);
return 0;
}
アクセサーを機能させるための回避策はありますか?
PS:cg::scalar_traits<S>::epsilon()
エラーが発生した場合に役立つ を使用していますが、冗長すぎます
研究: としても宣言されています
template<class S>
bool eq(S a, S b, S eps = cg::epsilon<double>())
コンパイラは、cg::epsilon の S を推測できなかったと不平を言っています。