[過去ログ] C++相談室 part165 (1002レス)
上下前次1-新
抽出解除 必死チェッカー(本家) (べ) 自ID レス栞 あぼーん
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
405: デフォルトの名無しさん (ワッチョイ 7f78-/FHh) [] 2024/08/24(土) 08:35:54.88 ID:yYuYqoCz0(1/6) AAS
すみません。教えて下さい。
template<class T, class U>void (T& x, const U& y)
{
x=y;
...
}
double ←complex<double> の代入がコンパイルエラーとなるconceptの書き方あるんでしょうか?
complex<double> ← doubleの代入ではエラーが出てほしくないです。
406: デフォルトの名無しさん (ワッチョイ 7f78-/FHh) [] 2024/08/24(土) 09:05:25.59 ID:yYuYqoCz0(2/6) AAS
あ、上では関数名fが抜けてましたね.concept使わずとも
template<class T> void f(complex<T>& x, const T& y)とすればいいでしょうけど、
y=xのときはどうかとか、あるいは complex<double>←float の代入はokにしたいとか、
いろいろ考えているとテンプレート関数なのに関数のオーバーロードが増えてしまって面倒だなと思ったものですから。
407: デフォルトの名無しさん (ワッチョイ 7f78-/FHh) [] 2024/08/24(土) 09:23:02.26 ID:yYuYqoCz0(3/6) AAS
y=xのときは忘れてください。(f(complex<T>& y, const T& x)とすればいいだけ)。どういう状況のためにconceptが必要なのか要点がまとまっていませんね。失礼しました。
409: デフォルトの名無しさん (ワッチョイ 7f78-/FHh) [] 2024/08/24(土) 11:11:32.60 ID:yYuYqoCz0(4/6) AAS
&& は右辺値参照ではなくてandの意味なんですね。std::is_same<double,T>はdouble型とT型が一致するかどうかを調べるヘルパー変数テンプレート、::value は trueかfalseのいずれかの値をとる定数ですか。static_assertは自分でエラーメッセージを作れるのがいいですね。完全にわかっていないですが、勉強します。ヒントありがとうございました。
414(1): デフォルトの名無しさん (ワッチョイ 7f78-/FHh) [] 2024/08/24(土) 14:40:14.03 ID:yYuYqoCz0(5/6) AAS
いろいろとありがとうございます。参考になりました。
template<class T, class U> void f(T& x, U& y)
{
if constexpr ( !(std::is_same<T,double>::value &&
std::is_same<U, std::complex<T>>::value) ) static_assert(false,"ワシャ許さんぞ!!");
y=x;
}
template <class T, class U> void g(T& x, U& y)
{
static_assert( (std::is_same<T,double>::value && std::is_same<U, std::complex<T>>::v
alue),"ワシャ許さんぞ!!" );
y=x;
}
int main()
{
using namespace std;
double x=3.14159265358979;
complex<double> z;
f(x,z);
g(z,x); // 順番変えたり、xをfloatにするとエラー
cout<<z<<endl;
しかし、コンパイル時にifがつかえるんですねえ。凄いな、constexpr
415: デフォルトの名無しさん (ワッチョイ 7f78-/FHh) [] 2024/08/24(土) 15:09:12.28 ID:yYuYqoCz0(6/6) AAS
std::is_same<T,double>::valueの代わりにstd::same_as<T,double>でも良いみたいですね.
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 1.283s*