C++相談室 part163

■ このスレッドは過去ログ倉庫に格納されています
2022/12/30(金) 23:16:31.37ID:DPUEZfMS0
!extend:checked:vvvvv:1000:512
!extend:checked:vvvvv:1000:512
↑同じ内容を3行貼り付けること

次スレは>>980が立てること
無理なら細かく安価指定

※前スレ
C++相談室 part162
https://mevius.5ch.net/test/read.cgi/tech/1667194175/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
2022/12/30(金) 23:48:59.52ID:4Hd9NmeQ0
≫1 << 乙 << endl;
3デフォルトの名無しさん (ワッチョイ 9a69-Ejmh)
垢版 |
2022/12/31(土) 09:58:55.55ID:wqRRT9ag0
皆さまあけましておめでとうございます
今年もよろしくお願いします
今日も今日とて相談がございます

基底クラスのポインタを格納できるコンテナに押し込んだ派生クラスへのポインタから、その派生クラスのインスタンスをユニークポインタで生成し、それを規定クラスのユニークポインタに押し込んで使いたいです
std::vector<Base*> BaseCnt;
Driv1 Driv1_;
Driv2 Driv2_;
Driv3 Driv3_;
BaseCnt.push_back(&Driv1_);
BaseCnt.push_back(&Driv2_);
BaseCnt.push_back(&Driv3_);
~数々の名誉ある処理を挟んで……~
std::unique_ptr<Base> BaseUni;
BaseUni=どうにかして実体をユニポで生成する関数(BaseCnt.back());
BaseUni->Update();//ここで望んでいる挙動はDriv3のオーバーライドでございます

上記の、どうにかして実体をユニポで生成する関数、が実現できなくて困っています
template<typename T>
std::unique_ptr<Base>&& theFunc(T*t)
{
return std::make_unique<T>();
}
で行けるのかなと思いましたがいけませんでした(^^)……
そもそも基底クラスに押し込んであるため、T型で受けると基底型になってしまいます(^_^)……
どうにかして派生クラスにメモリを確保し、かつそれを規定クラスのユニークポインタに押し込めないものでしょうか?

このままでは年が越せない……
どうかおしえてください
私はc++プリミティブの混乱予約型言語でございます……
2022/12/31(土) 10:30:40.33ID:KJmYA7fT0
うだうだ長文書かんとコード全体をwandboxなりideoneなりに書いてくれや
Updateにvirtualついてないとかだったら張っ倒すぞ
2022/12/31(土) 12:27:13.18ID:GJ3jFwbSM
確かに問題点が複数ある&想定する挙動が曖昧で分からないから、コメントのしようがない。

最小限の再現コードと期待する挙動をwandboxなりideoneなりに書いてからの話だな。
2022/12/31(土) 12:49:15.56ID:vu28B3si0
>>3 こんなこと?
class Base;
using Base_Ptr = std::unique_ptr <Base>;
struct Base {
virtual ~Base () = default;
virtual Base_Ptr construct () const = 0;
};
struct Driv3: Base {
virtual Base_Ptr construct () const
{
return std::make_unique <Driv3> ();
}
};
int main () {
std::vector<Base*> BaseCnt;
Driv3 Driv3_;
BaseCnt.push_back(&Driv3_);
std::unique_ptr<Base> BaseUni;
BaseUni=BaseCnt.back()->construct ();
return 0;
}
2022/12/31(土) 18:55:55.24ID:MecdUwfcM
コメントは対応するコードの前後どちらに書く?

// 別行なら前だが
int i = 0;

int i = 0; // 同じ行なら後?

同じ行に書いてたものが変更で長くなって別行に移したら前後が入れ替わるの気持ち悪くない?
2022/12/31(土) 19:51:29.83ID:SJuvalLBd
基本、同じ行
無理があるときは前の行
2022/12/31(土) 19:52:40.15ID:SJuvalLBd
エディタの都合に合わせてたら人間向けのメモでなくなる
2022/12/31(土) 19:56:33.63ID:tNW0EEuh0
grepなどによるキーワード検索がやりやすくなるよう意識したら良い
ctagsや統合開発環境みたいな高性能な検索機能がなくても探しやすいのが理想
2022/12/31(土) 20:10:39.20ID:YncayN1e0
>>7
> 同じ行に書いてたものが変更で長くなって別行に移したら前後が入れ替わるの気持ち悪くない?
修正が面倒だとは思うけど気持ち悪くはないな
2022/12/31(土) 20:52:41.08ID:0LppXV+K0
気持ち悪いつか、気になるものは後で見ても気になるから
そりゃ気持ちよく直すでしょ
2022/12/31(土) 21:28:19.88ID:Wrtrkox0d
気持ちはわかるよ
差分ツールで見たとき差分として出ちゃうからな
2022/12/31(土) 23:41:26.87ID:Lgb5NxGE0
コメントの移動だけが (一回分のコミットとして) 差分に出るのだったらちょっと嫌な感じだけど、
周辺のコードを修正した結果として行が長くなりすぎないようにコメントの位置も変えるという話なんだから
差分ツールで見たらどうせそこらへん一帯が出るわけでしょ。
その中にコメントのちょっとした移動が含まれるかどうかなんて気にするようなもんじゃないと思うけどなぁ。
2022/12/31(土) 23:56:21.90ID:thdzMSmPd
書くべきものは横着しないで書け
書かなくてよいもので油売るな
これだけのこと
2023/01/01(日) 00:07:36.95ID:xRsGwj7i0
ところで私がよく使う言語に Scheme があって Scheme ではセミコロンから改行までがコメントになるんだけど、
Scheme の (というか主な LISP 系言語の) 習慣では状況によってセミコロンの数を変えるし
フォーマッタはセミコロンの数に基づいてインデントを変える。
https://www.gnu.org/software/emacs/manual/html_node/elisp/Comment-Tips.html
便利な習慣だと思うんだけど他の言語ではこういうのを見ないなぁ。
2023/01/01(日) 00:14:48.52ID:3UYI3pmj0
何なら、本文の途中で折り返して、行末コメントにするわ
2023/01/01(日) 03:55:44.18ID:zV40glZu0
>>16
いらんわ
全然、羨ましくない
願い下げ
19デフォルトの名無しさん (ブーイモ MMb6-vTgN)
垢版 |
2023/01/01(日) 11:42:43.03ID:83NHqx7aM
コメントを同じ行に書くことはほとんどないかなあ
そもそも1行コメントで済む処理っどんなの? コメント必要なのかな?

俺は処理の塊の前に意図など含めて長文コメントを書いてる
2023/01/01(日) 14:59:08.11ID:M9T6rHgL0
行内コメントはどこまで下げるのかと言う問題が、
  foo();         // xxxとyyyを更新
  assertIm(xxx) + Im(yyy) == 0); // 変換結果は共役のはず
--------->| 40 カラム?
-------------->| 56 カラム?

オートフォーマッター任せにしたいが定説が無さげ
perltidyだとなんか隣接する行コメは64カラム目か、それを超える場合は一番長いのに合わせてくれるが
コードの長さがかなり不ぞろいなとき罪悪感みある、
 a();  // (aのコメント)
b();  // (bのコメント)
 very_long_long_long_name_function_call_to_baz(long_long_name_param, 1234567); // (←のコメント)
2023/01/01(日) 15:01:54.19ID:M9T6rHgL0
あとif文の行内コメントも悩む、
  if (a==b)
  {
  }else
2023/01/01(日) 15:03:25.53ID:ZNJrRmgOa
・コメントは41桁目から
・一行は95桁迄

が俺のマイルール
2023/01/01(日) 15:05:17.13ID:M9T6rHgL0
あとif文の行内コメントも悩む、
  if (a==b) // ここには分岐条件のコメントを書くべき?
  {       // ここにはthen節のコメントを書くべき?
    ...
  }
  else    // else節のコメントはここでええのか?
  {      // それともここか?
    ....
  }

どう書くかによってブレーススタイルやオートコードフォーマッタとの
共存具合が変わってくるので行内コメントはいろいろ問題が多いシステム、
2023/01/01(日) 15:09:39.48ID:ZNJrRmgOa
>>21
// a と b が等しいなら...
if (a==b){
// 等しい時の処理
...
// 等しくないなら...
} else {
// 等しくない時の処理
}
が俺のマイルール
※ いないと思うけどコメントの内容にはツッコミ厳禁ね
2023/01/01(日) 15:17:33.19ID:ZNJrRmgOa
>>23
ありゃ行内コメントか...

if (a==b){ // a と b が等しいなら...
... //. 等しい時の処理
} else { // 等しくないなら...
... // 等しくない時の処理
}

確かに通常のコメントと行内コメントが混在するとモヤモヤするのはある
26デフォルトの名無しさん (ワッチョイ 6301-9yt5)
垢版 |
2023/01/01(日) 17:05:55.66ID:c0wTdgdc0
>>16
よく使うって、何に使うんだよ?
2023/01/01(日) 17:43:06.94ID:xRsGwj7i0
>>26
手癖で使えるなじんだ言語ってひとつくらいはあるもんだろ。
俺はそれが Scheme だってだけで、やってることは自動でネットを巡回したりだとか
ファイルを条件別にフォルダに仕分けしたりだとかとかいった普段のちょっとした自動化とかだよ。
28デフォルトの名無しさん (ワッチョイ 9aad-TwI4)
垢版 |
2023/01/01(日) 17:48:24.72ID:OS3h3nzh0
(真理情報)grep検索しやすいのが正義
29デフォルトの名無しさん (ワッチョイ 6301-9yt5)
垢版 |
2023/01/01(日) 18:20:59.18ID:c0wTdgdc0
ニンジャ凄いな。
全部のコア使い切ってる。
30デフォルトの名無しさん (ワッチョイ 6301-9yt5)
垢版 |
2023/01/01(日) 18:29:13.35ID:c0wTdgdc0
新しいパソコンのメリットを特に感じていなかったけど、大物をビルドすると圧倒的に速いな。
31デフォルトの名無しさん (ワッチョイ 6301-9yt5)
垢版 |
2023/01/01(日) 18:29:31.45ID:c0wTdgdc0
何か間違えたのかと思ったわ。
あまりにも早すぎて。
2023/01/01(日) 19:58:13.71ID:7cm8ugfN0
>>16
/** */ や /// を普通のコメントとは区別してドキュメンテーションに使うでしょ?
c++だったらDoxygenとか
2023/01/01(日) 20:35:59.39ID:xRsGwj7i0
>>32
へー。
そういうツールを使ったことなかった。
2023/01/02(月) 15:24:57.96ID:8fX0q33xM
>>16
フォーマッタと相性悪すぎん?
Python といい見た目の違いに意味持たせるのカスでしかない
2023/01/02(月) 17:07:12.86ID:ArPslss00
PEP8
2023/01/02(月) 17:17:16.57ID:tiICTfPp0
>>34
意味によってセミコロンの個数を変えるとそれをフォーマッタが見た目 (インデント) に反映するという話なんだけど
2023/01/02(月) 17:55:39.66ID:1k7qyNCA0
自分が理解できないものは使えない奴とか言ういつもの人でしょ
スルーでいいかと
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況