次スレを立てる時は本文の1行目に以下を追加して下さい
!extend:on:vvvvv:1000:512
C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。
前スレ
C++相談室 part131
http://mevius.2ch.net/test/read.cgi/tech/1501295308/
このスレもよろしくね。
【初心者歓迎】C/C++室 Ver.101【環境依存OK】
http://mevius.2ch.net/test/read.cgi/tech/1500329247/
■長いソースを貼るときはここへ。■
http://codepad.org/
https://ideone.com/
[C++ FAQ]
https://isocpp.org/wiki/faq/
http://www.bohyoh.com/CandCPP/FAQ/ (日本語)
VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured
C++相談室 part132
レス数が950を超えています。1000を超えると書き込みができなくなります。
1デフォルトの名無しさん 転載ダメ (ワッチョイ faeb-wbjw)
2017/10/10(火) 00:11:34.01ID:nc/5PI4P0 >>878 の続きです。
同じく、テンプレート版
https://ideone.com/LO68r5
にて一点不満におもったことがあります。
>>878 では基底クラスの記述について、
template <typename T>
class Iterator {
public:
virtual T *next() = 0;
};
派生クラスは
template <typename T>
class XXXIterator : Iterato<T> {
public:
T *next();
};
template <typename T> T *XXXIterator::next() { ... }
と書きました。
しかし本当は、基底クラスを純粋に一個にしたいと希望しているのです。
つまり基底クラスにテンプレート引数Tを書きたくない。
class Iterator {
public:
virtual ○○○ *next() = 0;
};
と基底クラスを一つだけにしぼりつつ、
派生クラスにテンプレート引数を使用して記述することは可能でしょうか?○○○に書けるなにかいい記述はないでしょうか?
テンプレート引数を使用した具象クラスに対応する、テンプレート引数を使用しない抽象クラスを書くことは可能でしょうか?
同じく、テンプレート版
https://ideone.com/LO68r5
にて一点不満におもったことがあります。
>>878 では基底クラスの記述について、
template <typename T>
class Iterator {
public:
virtual T *next() = 0;
};
派生クラスは
template <typename T>
class XXXIterator : Iterato<T> {
public:
T *next();
};
template <typename T> T *XXXIterator::next() { ... }
と書きました。
しかし本当は、基底クラスを純粋に一個にしたいと希望しているのです。
つまり基底クラスにテンプレート引数Tを書きたくない。
class Iterator {
public:
virtual ○○○ *next() = 0;
};
と基底クラスを一つだけにしぼりつつ、
派生クラスにテンプレート引数を使用して記述することは可能でしょうか?○○○に書けるなにかいい記述はないでしょうか?
テンプレート引数を使用した具象クラスに対応する、テンプレート引数を使用しない抽象クラスを書くことは可能でしょうか?
881はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 466f-RuWE)
2017/11/20(月) 03:15:21.39ID:mEO8F9pQ0 >>878
付けなくてもいいし、付けても通るってのは私は今初めて知った。
付けなくてもいいし、付けても通るってのは私は今初めて知った。
882はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 466f-RuWE)
2017/11/20(月) 03:23:45.23ID:mEO8F9pQ0 >>879
ありがとうございます。
meyers の effective C++ 第7章を読み返しています
C++ には Java の fainal がないので、うっかり、std::string や std::vector を派生させてしまうところでした、危ないなあ…
ありがとうございます。
meyers の effective C++ 第7章を読み返しています
C++ には Java の fainal がないので、うっかり、std::string や std::vector を派生させてしまうところでした、危ないなあ…
884デフォルトの名無しさん (ワッチョイ 869f-GXP8)
2017/11/20(月) 03:30:13.52ID:iECo0Ul80 >>868
混乱するならシンプルに設計したら?例えばこんな感じ?登録して表示するだけなら簡単でしょ?
#include <stdio.h>
#include <string>
#include <vector>
class Book{
public:
std::string name;
Book(std::string _name) : name(_name){}
void show(){printf("%s\n",name.c_str());}
};
class Books{
public:
std::vector<Book *>m_list;
Books(){}
~Books(){for (auto p : m_list) if (p) delete p;}
void addBook(Book *p){m_list.push_back(p);}
};
int main(){
Books books;
books.addBook(new Book("aa"));books.addBook(new Book("bb"));
books.addBook(new Book("cc"));books.addBook(new Book("dd"));
for (auto p : books.m_list) p->show();
// iterator使いたいなら
//for (auto it = books.m_list.begin(); it != books.m_list.end; it++) (*it)->show();
return 0;
}
混乱するならシンプルに設計したら?例えばこんな感じ?登録して表示するだけなら簡単でしょ?
#include <stdio.h>
#include <string>
#include <vector>
class Book{
public:
std::string name;
Book(std::string _name) : name(_name){}
void show(){printf("%s\n",name.c_str());}
};
class Books{
public:
std::vector<Book *>m_list;
Books(){}
~Books(){for (auto p : m_list) if (p) delete p;}
void addBook(Book *p){m_list.push_back(p);}
};
int main(){
Books books;
books.addBook(new Book("aa"));books.addBook(new Book("bb"));
books.addBook(new Book("cc"));books.addBook(new Book("dd"));
for (auto p : books.m_list) p->show();
// iterator使いたいなら
//for (auto it = books.m_list.begin(); it != books.m_list.end; it++) (*it)->show();
return 0;
}
885はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 466f-RuWE)
2017/11/20(月) 03:34:54.09ID:mEO8F9pQ0 >>880
Java のことはあまり知らんので元ネタにした Java 版の方をよく見てなったけど、
interface のかわりに抽象クラスを使おうとしてたのか。
似たような機能に見えちゃうかもしれないけど、インターフェイスを強制する方法としては抽象クラスはあまり良くない。
C++ 的にはコンパイル時にディスパッチする多相と実行時の多相があって、
抽象クラスは実行時にディスパッチする仕組みなのでコンパイル時に確定するはずのことを実行時にするのはクソザコという風潮。
だけど「コンセプト」の機能が C++ に導入されるのが延び延びになってていまだ入ってないので、
traits とか SFINAE とかを使ったまわりくどいメタプログラミングで代用してるのが実情なんだ。
Java のことはあまり知らんので元ネタにした Java 版の方をよく見てなったけど、
interface のかわりに抽象クラスを使おうとしてたのか。
似たような機能に見えちゃうかもしれないけど、インターフェイスを強制する方法としては抽象クラスはあまり良くない。
C++ 的にはコンパイル時にディスパッチする多相と実行時の多相があって、
抽象クラスは実行時にディスパッチする仕組みなのでコンパイル時に確定するはずのことを実行時にするのはクソザコという風潮。
だけど「コンセプト」の機能が C++ に導入されるのが延び延びになってていまだ入ってないので、
traits とか SFINAE とかを使ったまわりくどいメタプログラミングで代用してるのが実情なんだ。
>>881
>付けなくてもいいし
うーん、デストラクタの場合はテンプレート引数をつけないとおこられちゃいます…
×https://ideone.com/x5FrwU 69行目
○https://ideone.com/FUJ3OO 69行目
よくわらからないな…
>付けなくてもいいし
うーん、デストラクタの場合はテンプレート引数をつけないとおこられちゃいます…
×https://ideone.com/x5FrwU 69行目
○https://ideone.com/FUJ3OO 69行目
よくわらからないな…
887はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 466f-RuWE)
2017/11/20(月) 03:53:09.38ID:mEO8F9pQ0 >>886
いや、型名の方には付ける必要あるよ
×:
template <typename T> TShelf::~TShelf() { delete [] (this->t_s); }
〇:
template <typename T> TShelf<T>::~TShelf() { delete [] (this->t_s); }
△: 知らんかった
template <typename T> TShelf<T>::~TShelf<T>() { delete [] (this->t_s); }
いや、型名の方には付ける必要あるよ
×:
template <typename T> TShelf::~TShelf() { delete [] (this->t_s); }
〇:
template <typename T> TShelf<T>::~TShelf() { delete [] (this->t_s); }
△: 知らんかった
template <typename T> TShelf<T>::~TShelf<T>() { delete [] (this->t_s); }
>>884
はい、すごくよくわかります!!
std::vector とか、std::list とかstd::deque とかは、たぶんいけると思います。
http://mevius.2ch.net/test/read.cgi/tech/1434079972/14
http://mevius.2ch.net/test/read.cgi/tech/1434079972/19
なんとなくデザパタ本を読み返していて、車輪の再発明に没頭してしまいましたが、C# のデザパタ本、というのも聞かないし、もうデザパタは古いのかな…
はい、すごくよくわかります!!
std::vector とか、std::list とかstd::deque とかは、たぶんいけると思います。
http://mevius.2ch.net/test/read.cgi/tech/1434079972/14
http://mevius.2ch.net/test/read.cgi/tech/1434079972/19
なんとなくデザパタ本を読み返していて、車輪の再発明に没頭してしまいましたが、C# のデザパタ本、というのも聞かないし、もうデザパタは古いのかな…
889デフォルトの名無しさん (ワッチョイ 42b3-VAF2)
2017/11/20(月) 03:58:54.21ID:O993TKuI0 マジか
役に立つ日が来るかどうかはシランケド
役に立つ日が来るかどうかはシランケド
>>887
ありがとうございます。確認いたしました。
ありがとうございます。確認いたしました。
891デフォルトの名無しさん (ワッチョイ 42b3-VAF2)
2017/11/20(月) 03:59:26.41ID:O993TKuI0 ↑ >>887
>>885
夜遅くにコメントいただきありがとうございます。
>C++ 的にはコンパイル時にディスパッチする多相と実行時の多相があって、
理解できます。コンパイル時に確定できるのなら最大限それに努める思想はたとえば constexpr にも現れていると思いました。
>抽象クラスは実行時にディスパッチする仕組みなのでコンパイル時に確定するはずのことを実行時にするのはクソザコという風潮。
うーん、たぶん私が周回遅れなだけだと思いますが、じゃあ、ひところ、あれほどまでにもてはやされたデザインパターンは、どこにいってしまったのでしょう…もう誰もやらないのかな…
夜遅くにコメントいただきありがとうございます。
>C++ 的にはコンパイル時にディスパッチする多相と実行時の多相があって、
理解できます。コンパイル時に確定できるのなら最大限それに努める思想はたとえば constexpr にも現れていると思いました。
>抽象クラスは実行時にディスパッチする仕組みなのでコンパイル時に確定するはずのことを実行時にするのはクソザコという風潮。
うーん、たぶん私が周回遅れなだけだと思いますが、じゃあ、ひところ、あれほどまでにもてはやされたデザインパターンは、どこにいってしまったのでしょう…もう誰もやらないのかな…
893はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 466f-RuWE)
2017/11/20(月) 04:13:43.35ID:mEO8F9pQ0 >>887
なんでこうなってるかっていうのは割と感覚的にやっちゃってるからうまいこと説明できひんのやけど。
クラステンプレートの中に関数テンプレートも書けたりするので
template<class T>
class foo {
public:
template<class U> void bar(void);
};
実装書くときはどれがどれに掛かってるかわかるようにせんといかん
template<class T> template<class U>
void foo<T>::bar(void) {
}
みたいな話なんじゃないかとコンパイラの気持ちになる仁奈ちゃんの気持ちになってた。
なんでこうなってるかっていうのは割と感覚的にやっちゃってるからうまいこと説明できひんのやけど。
クラステンプレートの中に関数テンプレートも書けたりするので
template<class T>
class foo {
public:
template<class U> void bar(void);
};
実装書くときはどれがどれに掛かってるかわかるようにせんといかん
template<class T> template<class U>
void foo<T>::bar(void) {
}
みたいな話なんじゃないかとコンパイラの気持ちになる仁奈ちゃんの気持ちになってた。
894はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 466f-RuWE)
2017/11/20(月) 04:30:34.82ID:mEO8F9pQ0 >>892
抽象クラスを使うパターンなんてのがあるわけ? GoF 本とか読んだことないから知らんけど。
それはインターフェイスをまとめた何かを作れって話とかじゃないの?
C++ の抽象クラスを使えって話とは違ったりしそうだけど。
デザインパターンはあくまでデザインの話なんだから言語の具体的な機能はその時代に有るものでやるしかないし、
よりよい機能が提供されるようになったら使うだろ、そりゃ。
抽象クラスを使うやり方しかできないなら「デザイン」を学び取れてないってこった。
まあ今は C++ への理解も十分でないからってのもあるだろうけどさ。
ところで QZ って C++ スレの常連みたいに思ってたけど、
その割にアレなのでひょっとして共通トリップだったりするの?
抽象クラスを使うパターンなんてのがあるわけ? GoF 本とか読んだことないから知らんけど。
それはインターフェイスをまとめた何かを作れって話とかじゃないの?
C++ の抽象クラスを使えって話とは違ったりしそうだけど。
デザインパターンはあくまでデザインの話なんだから言語の具体的な機能はその時代に有るものでやるしかないし、
よりよい機能が提供されるようになったら使うだろ、そりゃ。
抽象クラスを使うやり方しかできないなら「デザイン」を学び取れてないってこった。
まあ今は C++ への理解も十分でないからってのもあるだろうけどさ。
ところで QZ って C++ スレの常連みたいに思ってたけど、
その割にアレなのでひょっとして共通トリップだったりするの?
>>894
>その割にアレなのでひょっとして共通トリップだったりするの?
単に、あれよあれよと、また、次から次へと忘れていくので、ぜんぜん進歩しないだけなのでした。
こんな感じ… https://www.youtube.com/watch?v=Hflpt1-kAl4
>その割にアレなのでひょっとして共通トリップだったりするの?
単に、あれよあれよと、また、次から次へと忘れていくので、ぜんぜん進歩しないだけなのでした。
こんな感じ… https://www.youtube.com/watch?v=Hflpt1-kAl4
896デフォルトの名無しさん (ワッチョイ 228d-zvir)
2017/11/20(月) 07:05:19.03ID:8Dez9ldp0 手元に古いGoF日本語訳(1999年初版)があったので覗いてみたら、
Iteratorのサンプル(C++)が>>880みたいに抽象クラスで実装されていてびっくりした。
抽象クラスを使わなくても、処理の共通化を考えないなら問題ないし、
共通化したい場合でも、そこだけテンプレート化すればよいような気がする。
https://ideone.com/sFzBq4
Iteratorのサンプル(C++)が>>880みたいに抽象クラスで実装されていてびっくりした。
抽象クラスを使わなくても、処理の共通化を考えないなら問題ないし、
共通化したい場合でも、そこだけテンプレート化すればよいような気がする。
https://ideone.com/sFzBq4
897デフォルトの名無しさん (ワッチョイ 4178-kX9V)
2017/11/20(月) 08:00:57.16ID:GfOPAtNP0 VC++とか今でこそまともだけど昔はテンプレート周りがうんこすぎて風呂釜洗剤教の人のやり方に頼らざるを得なかったらしいね
898デフォルトの名無しさん (ワッチョイ 826e-Eq1o)
2017/11/20(月) 09:24:05.14ID:9q5rB25R0 そういう「まとも」を求めてVCを選ぶのは情弱のすることだ
意味の違う「まとも」で定評のあるコンパイラであって
意味の違う「まとも」で定評のあるコンパイラであって
899デフォルトの名無しさん (ワッチョイ f9b3-AWKa)
2017/11/20(月) 09:46:04.69ID:Veq8ZMOx0 Vistaまではgccでコンパイルしてたらしいからな。
900デフォルトの名無しさん (アウーイモ MM05-0x9U)
2017/11/20(月) 10:17:12.94ID:5dn4op1oM 初心者なんですがusing使い方を教えて下せえ
901デフォルトの名無しさん (ワッチョイ 0234-1gB9)
2017/11/20(月) 10:36:08.17ID:Fx3rJ6pW0 usingは時代によって使える機能が異なる
昔はnamespaceから使える宣言を取り出す役割
最近は=を用いてtypedefの簡略化っぽい書き方が出来る
昔はnamespaceから使える宣言を取り出す役割
最近は=を用いてtypedefの簡略化っぽい書き方が出来る
902デフォルトの名無しさん (ワッチョイ 0234-1gB9)
2017/11/20(月) 10:42:51.51ID:Fx3rJ6pW0 将来的にはusingがプロパティの役割まで担ってくれると余計な予約後増やさなくて済む希ガス
903デフォルトの名無しさん (ワンミングク MM52-Dzd0)
2017/11/20(月) 12:17:25.71ID:OatlO4rKM904デフォルトの名無しさん (ワッチョイ ae6e-Eq1o)
2017/11/20(月) 14:57:25.95ID:ZHV8ZCmh0 ratioのバグとかinitializer_listとかね
しっかりしているようで時おり大ボケで笑いを取る謎な会社だ
しっかりしているようで時おり大ボケで笑いを取る謎な会社だ
905デフォルトの名無しさん (ササクッテロラ Spd1-CMbJ)
2017/11/20(月) 16:59:42.71ID:CB3KD7K4p906デフォルトの名無しさん (ワッチョイ ae6e-Eq1o)
2017/11/20(月) 17:06:25.94ID:ZHV8ZCmh0 重箱の隅じゃあんめえ
仮想デストラクタがないことと継承禁止は近いが違う
仮想デストラクタがないことと継承禁止は近いが違う
907はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 466f-RuWE)
2017/11/20(月) 17:20:13.60ID:mEO8F9pQ0 std::vector とかを public 継承してもスライシングが起こらないように使う分には全然問題ないわけだしな。
でも人間はアホだからスライシングするし、スライシングしたときにコンパイルエラーにしてくれないから避けようっていう「習慣」なだけで、
言語機能としてはデストラクタが仮想になってないからといって継承が禁止されているってわけではないんだ。
そこらへんは確かに意味づけが違う。
でも人間はアホだからスライシングするし、スライシングしたときにコンパイルエラーにしてくれないから避けようっていう「習慣」なだけで、
言語機能としてはデストラクタが仮想になってないからといって継承が禁止されているってわけではないんだ。
そこらへんは確かに意味づけが違う。
908デフォルトの名無しさん (ワッチョイ 02cf-Gm5t)
2017/11/20(月) 17:54:47.05ID:4sV97R+K0 デザパタは基本的にGC言語向きだしな
C++とは相性が良くない
C++とは相性が良くない
909デフォルトの名無しさん (スプッッ Sd41-LOf1)
2017/11/20(月) 19:05:49.28ID:RcaXyFV8d C++の基本的なコーディングを学ぶのにオススメな書籍あるかな?
テクニック集とかもあると読んでみたいと思っている
テクニック集とかもあると読んでみたいと思っている
910デフォルトの名無しさん (ワッチョイ a17f-8CrJ)
2017/11/20(月) 19:11:23.76ID:q0WTO8Pn0 EffectiveC++シリーズ
Exceptional C++
C++ Coding Standards
あたりの定番中の定番でいいだろ
Exceptional C++
C++ Coding Standards
あたりの定番中の定番でいいだろ
911デフォルトの名無しさん (ワッチョイ 41eb-RjUU)
2017/11/20(月) 20:12:37.95ID:rJCmscgl0 ここって本職でやってる人らばっかりなんかね
日曜プログラマが気安く書き込んでもいいのだろうか
日曜プログラマが気安く書き込んでもいいのだろうか
912はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 466f-RuWE)
2017/11/20(月) 20:21:38.03ID:mEO8F9pQ0 >>911
いいよ。 俺も趣味プログラマだけど偉そうに書き込んでるし。
いいよ。 俺も趣味プログラマだけど偉そうに書き込んでるし。
913デフォルトの名無しさん (ワッチョイ 02bd-VFQ0)
2017/11/20(月) 21:53:59.25ID:gqHMI2DN0 GoF本のうち
Stateパターンは抽象クラス必須
Abstractなんちゃら系も抽象クラス必須
な印象
Stateパターンは抽象クラス必須
Abstractなんちゃら系も抽象クラス必須
な印象
914デフォルトの名無しさん (ワッチョイ 02e7-GXP8)
2017/11/20(月) 22:05:37.00ID:vFwnmuVP0 >>911
プロがここでうんちく垂れてたら引くわな
プロがここでうんちく垂れてたら引くわな
915デフォルトの名無しさん (ワッチョイ a19f-RjUU)
2017/11/20(月) 22:07:59.95ID:H8zFncfx0 >>873
最新版で該当ケースを探せず、
わざわざ5年前の版を持ち出してきてまで俺ツエーしたいヘタレを相手にしてしまい、すいませんでしたー
gcc4.4.7(2012/3/13)の時点で対応できて無いという情報はものすごく役に立ちますー(棒)
つかマジで、賢いつもりなら最新版で該当ケース探してgccに報告しろよ。
問題に遭遇したらとりあえず最新版、というのは基本だ。
ここを問題視する奴がgcc4.4.7なんて今使ってるわけないだろ。お前は馬鹿なのか?
お前のその努力は誰の為にも役に立ってないだろ。
これは多分に政治的問題で、コンパイラ屋がごねているだけだ。
既に言ったとおり、
reinterpret_cast相当のことがなされている場合、その関数単位で -fno-strict-aliasing すればいいだけで、
これに関して技術/仕様的問題は何もない。
ただ、「ソースさえ正しければこんな問題は発生しない」とか言って、コンパイラ屋がごねてるんだよ。
だから、力関係が逆転すればいきなり全部直ってもおかしくない。
gcc7.2.0がどっちのアプローチ、
つまり、上記の通りばっさり最適化を切ってしまい、最適化ケースを積み上げる方向にしたのか、
或いは従来どおり、過度の最適化を検出し、最適化を防ぐケースを積み上げることにしたのかは、俺は知らない。
ただ、どちらのケースであっても、最新版で上手く行かないケースがあれば、それはgccにとっては有用な情報なんだよ。
それをわざわざ旧版で、しかも隠してしれっととか、意味無いしせこいわw
最新版で出現しないから焦ったか?小物感ありあり。
> まぁそんなことは無いんだけどさ。
とか言うから、お?釣りか?ならここは全力で釣られてやるさ、該当事例持って来いよ!って流れなのに、
事前に該当事例用意しておかずに釣りとかアホかテメーは。
君が最新版で完全にアウトなケースを用意してれば、ああこれは完全に俺の負けですサーセン、とお後がよろしかったのに、
gcc4.4.7であることにも触れず俺ツエーするとか、小物過ぎて泣ける。
お前もうちょっとスレの流れを考えろよ。
最新版で該当ケースを探せず、
わざわざ5年前の版を持ち出してきてまで俺ツエーしたいヘタレを相手にしてしまい、すいませんでしたー
gcc4.4.7(2012/3/13)の時点で対応できて無いという情報はものすごく役に立ちますー(棒)
つかマジで、賢いつもりなら最新版で該当ケース探してgccに報告しろよ。
問題に遭遇したらとりあえず最新版、というのは基本だ。
ここを問題視する奴がgcc4.4.7なんて今使ってるわけないだろ。お前は馬鹿なのか?
お前のその努力は誰の為にも役に立ってないだろ。
これは多分に政治的問題で、コンパイラ屋がごねているだけだ。
既に言ったとおり、
reinterpret_cast相当のことがなされている場合、その関数単位で -fno-strict-aliasing すればいいだけで、
これに関して技術/仕様的問題は何もない。
ただ、「ソースさえ正しければこんな問題は発生しない」とか言って、コンパイラ屋がごねてるんだよ。
だから、力関係が逆転すればいきなり全部直ってもおかしくない。
gcc7.2.0がどっちのアプローチ、
つまり、上記の通りばっさり最適化を切ってしまい、最適化ケースを積み上げる方向にしたのか、
或いは従来どおり、過度の最適化を検出し、最適化を防ぐケースを積み上げることにしたのかは、俺は知らない。
ただ、どちらのケースであっても、最新版で上手く行かないケースがあれば、それはgccにとっては有用な情報なんだよ。
それをわざわざ旧版で、しかも隠してしれっととか、意味無いしせこいわw
最新版で出現しないから焦ったか?小物感ありあり。
> まぁそんなことは無いんだけどさ。
とか言うから、お?釣りか?ならここは全力で釣られてやるさ、該当事例持って来いよ!って流れなのに、
事前に該当事例用意しておかずに釣りとかアホかテメーは。
君が最新版で完全にアウトなケースを用意してれば、ああこれは完全に俺の負けですサーセン、とお後がよろしかったのに、
gcc4.4.7であることにも触れず俺ツエーするとか、小物過ぎて泣ける。
お前もうちょっとスレの流れを考えろよ。
916デフォルトの名無しさん (ブーイモ MMcd-pLBf)
2017/11/20(月) 22:13:38.04ID:cvRta7BJM >>908
GoF本はc++とsmalltalkだったろ
GoF本はc++とsmalltalkだったろ
917デフォルトの名無しさん (ワッチョイ 02bd-VFQ0)
2017/11/20(月) 22:48:11.84ID:gqHMI2DN0 テンキー風のボタンの並びでモードによって意味が変わる(Num Lock ON/OFFのもっと複雑化したようなやつ
というユザーインターフェースの実装はStateパターンのどくだんば
そこまでレトロなのでなくてもGUIでお絵かきツールを集めたツールボックスなUIとか作ると
Abstructなんちゃらパターンのどれかを再発明しているケースが多いと思う
というユザーインターフェースの実装はStateパターンのどくだんば
そこまでレトロなのでなくてもGUIでお絵かきツールを集めたツールボックスなUIとか作ると
Abstructなんちゃらパターンのどれかを再発明しているケースが多いと思う
918デフォルトの名無しさん (ワッチョイ 02e7-GXP8)
2017/11/20(月) 23:04:17.12ID:vFwnmuVP0 ←なぜか変換できない
919デフォルトの名無しさん (ワッチョイ 466f-MUuo)
2017/11/20(月) 23:35:39.24ID:mEO8F9pQ0 独擅場 ← どくせんじょう
920はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 466f-RuWE)
2017/11/21(火) 00:48:45.97ID:KkY90WH60 >>913
昨日 >>885 でまわりくどいメタプログラミングと言ってたのがそれだ。
State パターンのように特定のメンバ関数を持っていることを強制したいときには
それを判定するトレイツを作って対応する。
たとえば >>886 にあるコードを対象に考えて、
「あるクラスがそのクラス自身のポインタを返す next という名前のメンバ関数を持っているか」
を判定するトレイツはこうなる。
template<class T>
class has_next {
template<class U, class V = T>
struct helper : std::false_type {};
template<class U>
struct helper<U, typename std::enable_if<std::is_same<decltype(std::declval<U>().next()), U*>::value, T>::type> : std::true_type {};
public:
static const bool value = helper<T>::value;
};
C++ 標準の type_traits を真似してるので使い方もだいたい同じ。
static_assert(!has_next<TShelfIterator<Book>>::value, "TShelfIterator must has next() method.");
みたいに書いておけば TShelfIterator<Book> がメンバ関数 next を持っていることが保証される。
持っていなければコンパイル時にエラーになるから。
ここではひとつのメンバ関数を判定するだけのものを作ったけど、 Boost にはもっと汎用的にいい感じにかけるやつが有った気がする。
知らんけど。
昨日 >>885 でまわりくどいメタプログラミングと言ってたのがそれだ。
State パターンのように特定のメンバ関数を持っていることを強制したいときには
それを判定するトレイツを作って対応する。
たとえば >>886 にあるコードを対象に考えて、
「あるクラスがそのクラス自身のポインタを返す next という名前のメンバ関数を持っているか」
を判定するトレイツはこうなる。
template<class T>
class has_next {
template<class U, class V = T>
struct helper : std::false_type {};
template<class U>
struct helper<U, typename std::enable_if<std::is_same<decltype(std::declval<U>().next()), U*>::value, T>::type> : std::true_type {};
public:
static const bool value = helper<T>::value;
};
C++ 標準の type_traits を真似してるので使い方もだいたい同じ。
static_assert(!has_next<TShelfIterator<Book>>::value, "TShelfIterator must has next() method.");
みたいに書いておけば TShelfIterator<Book> がメンバ関数 next を持っていることが保証される。
持っていなければコンパイル時にエラーになるから。
ここではひとつのメンバ関数を判定するだけのものを作ったけど、 Boost にはもっと汎用的にいい感じにかけるやつが有った気がする。
知らんけど。
921デフォルトの名無しさん (ワッチョイ 6e81-LokX)
2017/11/21(火) 01:13:43.73ID:H+r6aFWv0 そんなくそレガシーなtraits
久々に見た…
久々に見た…
922デフォルトの名無しさん (スップ Sd82-LOf1)
2017/11/21(火) 17:31:41.16ID:6BA+Ife8d あるファイルに下のような文字が書き込まれていて
xxxx=3
これの3を取得する完璧無欠なロジックなにかないかな
xxxx=3
これの3を取得する完璧無欠なロジックなにかないかな
923デフォルトの名無しさん (ワッチョイ 4178-kX9V)
2017/11/21(火) 17:32:59.03ID:uRVBPn0b0 完璧無欠とは?
924デフォルトの名無しさん (スップ Sd82-LOf1)
2017/11/21(火) 17:36:16.46ID:6BA+Ife8d925デフォルトの名無しさん (アウアウカー Sa49-vUM9)
2017/11/21(火) 18:10:16.89ID:B2ib4/wIa 正規表現でよくない?
926デフォルトの名無しさん (ワッチョイ a104-0wpo)
2017/11/21(火) 19:05:58.85ID:DIhAB+/L0 リバースイテレータをfindしてイコールでセパレート。
って、数行から見つけるのか。
構文解析とかか?
って、数行から見つけるのか。
構文解析とかか?
927デフォルトの名無しさん (スップ Sd82-LOf1)
2017/11/21(火) 19:38:49.19ID:6BA+Ife8d928デフォルトの名無しさん (ワッチョイ a168-+5lI)
2017/11/21(火) 19:53:50.67ID:GhiisSyt0 (?<=^xxx=)\d+$
929デフォルトの名無しさん (ワッチョイ 41eb-RjUU)
2017/11/21(火) 20:30:32.65ID:0pu32Yjt0 float演算がdoubleよりも遅いってアジですか?
>>929
何が計算するかによる、としか
何が計算するかによる、としか
931デフォルトの名無しさん (ワッチョイ 41eb-RjUU)
2017/11/21(火) 21:12:53.35ID:0pu32Yjt0 さいですか
932デフォルトの名無しさん (オッペケ Srd1-0Zlk)
2017/11/21(火) 21:19:38.81ID:muR8Mwv6r933デフォルトの名無しさん (スップ Sd82-LOf1)
2017/11/21(火) 21:44:16.41ID:6BA+Ife8d934デフォルトの名無しさん (ワッチョイ a980-61Vg)
2017/11/21(火) 21:55:27.92ID:6jcLJvUW0 >>927
そういう設定ファイル的なものを読むならkeyとvalueのペアのリストつまりmapを返す実装を考えた方がいい
そういう設定ファイル的なものを読むならkeyとvalueのペアのリストつまりmapを返す実装を考えた方がいい
935デフォルトの名無しさん (スップ Sd82-LOf1)
2017/11/21(火) 22:16:59.77ID:6BA+Ife8d936はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 466f-RuWE)
2017/11/21(火) 22:33:26.16ID:KkY90WH60937デフォルトの名無しさん (ワッチョイ 4178-kX9V)
2017/11/21(火) 22:42:43.82ID:uRVBPn0b0 ってかboostのPropertyTreeにiniパーサーがあるからそれ使うといいよ
938デフォルトの名無しさん (スップ Sd82-LOf1)
2017/11/21(火) 22:42:58.28ID:6BA+Ife8d >>936
回答すると
数値以外もありうる
改行は値として入れない
エスケープってなんだろう?
xxxに関しては最大16文字の文字列(大文字小文字計52文字の組み合わせ)
たったこれだけでも深いね
ソフトウェアって神秘
回答すると
数値以外もありうる
改行は値として入れない
エスケープってなんだろう?
xxxに関しては最大16文字の文字列(大文字小文字計52文字の組み合わせ)
たったこれだけでも深いね
ソフトウェアって神秘
939デフォルトの名無しさん (ワッチョイ a168-+5lI)
2017/11/21(火) 23:00:05.88ID:GhiisSyt0 ini-parserてのがなかなか良さそう
picojson,rapidxmlなどが好きな人にはいいかも
picojson,rapidxmlなどが好きな人にはいいかも
940デフォルトの名無しさん (ワッチョイ 869f-GXP8)
2017/11/22(水) 02:34:39.84ID:9vladmL60 構文解析したいならbisonでも使ったらいいんじゃね?
941デフォルトの名無しさん (ワッチョイ f9b3-AWKa)
2017/11/22(水) 03:34:34.44ID:ft6g9THr0 ム板で公開されたのがあったじゃないか。
942デフォルトの名無しさん (ワッチョイ 41b3-RjUU)
2017/11/22(水) 10:29:13.01ID:wHcXBwMz0943デフォルトの名無しさん (ワッチョイ a980-61Vg)
2017/11/22(水) 10:59:36.64ID:jvBgNmmT0 >>942
どこの最近?
どこの最近?
944デフォルトの名無しさん (ワッチョイ c58a-iF25)
2017/11/22(水) 11:55:13.96ID:/unloUf+0 XMLは配列が直接表現できないし手で書くのがクソめんどくさいし見づらい
その点JSONの方がずっとマシなんだけど標準JSONだとコメント書けない
その点JSONの方がずっとマシなんだけど標準JSONだとコメント書けない
945デフォルトの名無しさん (ワッチョイ 42b3-VAF2)
2017/11/22(水) 12:48:47.95ID:PiUoYWXr0 適材適所、の一言で片付く問題
好きな方使え
好きな方使え
946デフォルトの名無しさん (ワンミングク MM52-61Vg)
2017/11/22(水) 13:52:54.31ID:gFgFfMOWM 人が書く設定ファイルならtomlがパースのしやすさと書きやすさでバランスが良いと思う
947デフォルトの名無しさん (ワッチョイ a168-+5lI)
2017/11/22(水) 16:17:23.80ID:HDCbnteD0948はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 466f-RuWE)
2017/11/22(水) 20:12:53.57ID:Rn9KsJdK0 Cargo の設定ファイルも TOML やぞ。 モダーンな言語のモダーンなツールは TOML がトレンド。 これ。
YAML みたいにインデントで構造を表現するのってパースめんどくさい。
個人的に YAML は不格好に見えて好きじゃないっていう主観もあるんだけど、
YAML ってそんなに定番ってほど目にしたことが無いな〜と思って考えたら
たぶん俺の巣は Scheme スレやからやな。
Lisp 界隈では設定ファイルにはS式を使ってまうもんな。
YAML みたいにインデントで構造を表現するのってパースめんどくさい。
個人的に YAML は不格好に見えて好きじゃないっていう主観もあるんだけど、
YAML ってそんなに定番ってほど目にしたことが無いな〜と思って考えたら
たぶん俺の巣は Scheme スレやからやな。
Lisp 界隈では設定ファイルにはS式を使ってまうもんな。
949デフォルトの名無しさん (ワッチョイ a168-+5lI)
2017/11/22(水) 21:00:11.47ID:h+KIZtFy0 luaなんかもよく使われるけど、schemeやluaが設定ファイルとして使われるのは
呼び出し側の言語が同じであるか、他の用途で使うためにすでに組み込んでる場合がほどんどで
設定ファイルだけの為にLL組み込むにはお手軽とは言えないかな
TOMLはいいとは思うんだけど
自分が使うなら仕様が固まってからの1.0〜は必須で
↓で300程度は使われてからかな
$ apt-file search toml | grep "\.toml$" | wc -l
0
$ apt-file search json | grep "\.json$" | wc -l
3611
$ apt-file search yaml | grep "\.yaml$" | wc -l
1480
呼び出し側の言語が同じであるか、他の用途で使うためにすでに組み込んでる場合がほどんどで
設定ファイルだけの為にLL組み込むにはお手軽とは言えないかな
TOMLはいいとは思うんだけど
自分が使うなら仕様が固まってからの1.0〜は必須で
↓で300程度は使われてからかな
$ apt-file search toml | grep "\.toml$" | wc -l
0
$ apt-file search json | grep "\.json$" | wc -l
3611
$ apt-file search yaml | grep "\.yaml$" | wc -l
1480
950デフォルトの名無しさん (ドコグロ MM41-ZIVp)
2017/11/22(水) 21:10:35.27ID:W0SJQGiTM 最近この手の話題に疎いからtomlとか知らんかったのでちょっとググったけどまあ好きなの使えや
って感想しかないわ
https://gist.github.com/miyakogi/e8631ce5f7c956db2313
って感想しかないわ
https://gist.github.com/miyakogi/e8631ce5f7c956db2313
951はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 466f-RuWE)
2017/11/22(水) 21:16:10.07ID:Rn9KsJdK0 パースの楽さだけで言えば JSON が優勝だけど人が手書きするには色々アレだからな。
952デフォルトの名無しさん (ワッチョイ 41eb-RjUU)
2017/11/22(水) 21:20:22.39ID:3/I2dLA90 好きなの使えっつっても全部導入して試すの面倒や
953デフォルトの名無しさん (ワッチョイ 6ea5-RjUU)
2017/11/22(水) 21:56:28.30ID:+hB2MqUt0 ES5以降ケツコンマOKになったんだからJSONも新規格にすりゃいいのに。
954デフォルトの名無しさん (ワッチョイ 02bd-VFQ0)
2017/11/22(水) 23:47:16.65ID:AAzHTorM0 >>936
正規表現で済んでいるのになんでスタックが要るんじゃ!!!!!!11!1!!!!
正規表現で済んでいるのになんでスタックが要るんじゃ!!!!!!11!1!!!!
956デフォルトの名無しさん (ワッチョイ 5fbd-hcjg)
2017/11/23(木) 00:36:02.97ID:h8NdPAUM0 文脈自由文法は解析にスタック(理論上は無限の段数のやつ)が要るクラスだが
正規言語は有限状態マシンで済む言語のクラス
今話題の設定言語は無限の入れ子は持たなそうなので正規言語で逝ける、
正規言語は有限状態マシンで済む言語のクラス
今話題の設定言語は無限の入れ子は持たなそうなので正規言語で逝ける、
957デフォルトの名無しさん (ワッチョイ 5fbd-hcjg)
2017/11/23(木) 00:37:37.76ID:h8NdPAUM0 と、
言いたいのでわ…
言いたいのでわ…
958はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf6f-KsIq)
2017/11/23(木) 01:07:08.12ID:fj1LdTry0 ん〜、そのへんの学問的な分類はよう知らんけど、取りうる状態は有限でもバックトラックは起こるしそのためのスタックは要るんちゃう?
同じ文法の構文解析器を作ればどっちのアプローチでもスタックの消費量はかわらんと思うんだけど。
より制限の強い方で「十分」っつーならそれはわかる。 C++ 標準に入ってる機能で出来りゃ楽だしな。
ただ、正規表現ライブラリだとエラーの検出場所の伝達方法とかで融通が利かなかったりするので、
ユーザーが入力する設定ファイルを解析するパーサを作るとなると作りこみ難いという感触があるかな。
同じ文法の構文解析器を作ればどっちのアプローチでもスタックの消費量はかわらんと思うんだけど。
より制限の強い方で「十分」っつーならそれはわかる。 C++ 標準に入ってる機能で出来りゃ楽だしな。
ただ、正規表現ライブラリだとエラーの検出場所の伝達方法とかで融通が利かなかったりするので、
ユーザーが入力する設定ファイルを解析するパーサを作るとなると作りこみ難いという感触があるかな。
959デフォルトの名無しさん (ワッチョイ 7f56-PrD/)
2017/11/23(木) 06:39:00.31ID:NFzuGiE50 「チョムスキー階層」でググれ
960デフォルトの名無しさん (ワッチョイ 7f56-PrD/)
2017/11/23(木) 07:23:17.08ID:NFzuGiE50 >>958
>ん〜、そのへんの学問的な分類はよう知らんけど、取りうる状態は有限でもバックトラックは起こるしそのためのスタックは要るんちゃう?
非決定性有限オートマトンは決定性有限オートマトンに変換できるので、
バックトラックが一切起こらない形に書き換えることは可能。
lexなんかだと、そのような変換を行ったコードを生成していたはず。
ただし、プログラム言語などで一般的に使われる正規表現は、
ここでいう正規言語を拡張したものなので、この限りではない。
>ん〜、そのへんの学問的な分類はよう知らんけど、取りうる状態は有限でもバックトラックは起こるしそのためのスタックは要るんちゃう?
非決定性有限オートマトンは決定性有限オートマトンに変換できるので、
バックトラックが一切起こらない形に書き換えることは可能。
lexなんかだと、そのような変換を行ったコードを生成していたはず。
ただし、プログラム言語などで一般的に使われる正規表現は、
ここでいう正規言語を拡張したものなので、この限りではない。
961デフォルトの名無しさん (アークセー Sxfb-DkU3)
2017/11/23(木) 14:40:51.51ID:QeiOUUJtx C++のプロジェクトに戻りたい。
962デフォルトの名無しさん (ワッチョイ 5fb3-9Jqp)
2017/11/23(木) 18:06:46.17ID:5yPMgLrz0 どうぞどうぞ
963デフォルトの名無しさん (ワッチョイ 5fbd-hcjg)
2017/11/23(木) 18:56:01.32ID:h8NdPAUM0 もう次スレ要らないのでは
またまた低レベルな質問で恐縮しております。よろしくお願いいたします。
https://ideone.com/MXvhkC
ここまで実装できている状態で、演算子 += を定義するには、どのように書けばいいでしょうか?
なお実際に作業している対象は自作の多桁長演算ライブラリで、operator+=() を operator=() や operator+() を再利用できればうれしいな、と考えております。
operator+() や operator=() に書いていることを、繰り返して書くのは避けたいと考えているのです。
https://ideone.com/MXvhkC
ここまで実装できている状態で、演算子 += を定義するには、どのように書けばいいでしょうか?
なお実際に作業している対象は自作の多桁長演算ライブラリで、operator+=() を operator=() や operator+() を再利用できればうれしいな、と考えております。
operator+() や operator=() に書いていることを、繰り返して書くのは避けたいと考えているのです。
965デフォルトの名無しさん (ワッチョイ bfe7-5mWG)
2017/11/23(木) 19:07:30.71ID:IGgCkWwq0 普通はoperator+=()を実装してから、それを使ってoperator+を実装する
>>965
なるほど
https://ideone.com/t89oo1
しかし、+=, -= ならまだしも、 *=, /=, %= を考えると、なんだか似たようなコードを二箇所に書きそうな雰囲気がします…
なるほど
https://ideone.com/t89oo1
しかし、+=, -= ならまだしも、 *=, /=, %= を考えると、なんだか似たようなコードを二箇所に書きそうな雰囲気がします…
967デフォルトの名無しさん (ワッチョイ bfe7-5mWG)
2017/11/23(木) 19:54:00.12ID:IGgCkWwq0 だからboostにこんなのがあったりする
https://boostjp.github.io/tips/operators.html
https://boostjp.github.io/tips/operators.html
968デフォルトの名無しさん (ワッチョイ 7feb-aYIp)
2017/11/23(木) 19:56:33.11ID:5nCr5Wf60 CRTP使って自動実装
969はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf6f-KsIq)
2017/11/23(木) 20:01:00.33ID:fj1LdTry0 >>964
なんで friend がついてんの?
なんで friend がついてんの?
970デフォルトの名無しさん (ワッチョイ 47b3-ThNz)
2017/11/23(木) 20:17:56.76ID:j5z8beti0 >>967
これってなんでprivate継承なのか分からない
これってなんでprivate継承なのか分からない
971はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf6f-KsIq)
2017/11/23(木) 20:23:32.48ID:fj1LdTry0 >>970
スライシングを起こさないようにじゃないの。
デストラクタを virtual にすると要らん仮想関数テーブルが作られちゃうからな。
それでいて定義する関数は friend 関数にしてるから外側からでも見えるんだな。
スライシングを起こさないようにじゃないの。
デストラクタを virtual にすると要らん仮想関数テーブルが作られちゃうからな。
それでいて定義する関数は friend 関数にしてるから外側からでも見えるんだな。
>>969
こんな小題でもいろいろと試されるんですね…
たしかに operator+=() は、意味からいっても friend である必要はまったくないですね。
一方 operator==(), operator+() は式の表現としての対象性を保存したいので、friend をつけたいと考えています。
operator<<() に対しては friend を必ずつけないといけないようですが、その理由はよくわかっていません。
https://ideone.com/pR0EP1
こんな小題でもいろいろと試されるんですね…
たしかに operator+=() は、意味からいっても friend である必要はまったくないですね。
一方 operator==(), operator+() は式の表現としての対象性を保存したいので、friend をつけたいと考えています。
operator<<() に対しては friend を必ずつけないといけないようですが、その理由はよくわかっていません。
https://ideone.com/pR0EP1
973デフォルトの名無しさん (アウアウウー Sacb-DWFp)
2017/11/23(木) 22:59:38.32ID:vKpvx9Uha IDE使っていて思うのがtemplate関数でデフォルト引数classAを設定すれば、
template<typename T=classA>
void Test(T tmp){
tmp.func(1, 2, 3);
}
上記のtmp.のところでclassAの関数とかが出て来るようになると嬉しいとか思ったり
コンセプトとかで対応できるようになるんでしょうか?
template<typename T=classA>
void Test(T tmp){
tmp.func(1, 2, 3);
}
上記のtmp.のところでclassAの関数とかが出て来るようになると嬉しいとか思ったり
コンセプトとかで対応できるようになるんでしょうか?
974デフォルトの名無しさん (ワッチョイ 7f81-fNTp)
2017/11/23(木) 23:16:02.95ID:WYrOiD8s0 mix-inもまともに知らないやつがなぜ回答してるのか…
975デフォルトの名無しさん (ワッチョイ 0704-bLiP)
2017/11/24(金) 00:17:10.75ID:mELw8YtS0976デフォルトの名無しさん (ワッチョイ df7e-lrN+)
2017/11/24(金) 01:03:21.71ID:/7rxT1Yr0977デフォルトの名無しさん (ワッチョイ 5fbd-hcjg)
2017/11/24(金) 01:39:31.39ID:Z3szivMI0 mix-inで理解が止まっている人がなんか吼えてますな
978デフォルトの名無しさん (オッペケ Srfb-gBtc)
2017/11/24(金) 08:42:41.97ID:ZeExn92sr979デフォルトの名無しさん (ワッチョイ 7f81-fNTp)
2017/11/24(金) 09:00:16.20ID:nFkUcp0I0 >>977
boost operatorsのprivate継承がmix-in以外のなんだと思ってるんだ?
boost operatorsのprivate継承がmix-in以外のなんだと思ってるんだ?
レス数が950を超えています。1000を超えると書き込みができなくなります。
ニュース
- アメリカ、入国時に「日本人を含む外国人観光客の最大5年分のSNS履歴の提出」義務化へ 過去10年間に使用のメールアドレスや電話番号等も★2 [Hitzeschleier★]
- 立憲・小宮山議員、「牛乳=白い水」投稿を削除 批判殺到で「大変失礼申し上げました」 [少考さん★]
- 【中国外務省】日本への渡航自粛を再度呼びかけ 今度は「地震発生」を理由に [ぐれ★]
- 日本語が話せない「外国籍」の子が急増中、授業がストップ、教室から脱走も…先生にも大きな負担「日本語支援」追いつかず★3 [七波羅探題★]
- 内閣支持、微減59.9% 5割超が補正予算評価 時事通信世論調査 [どどん★]
- 【芸能】デパートで見つけたランドセルが衝撃価格! つまみ枝豆「どこかで規制しないと」に共感の声殺到 「全て同感」「高すぎます」★2 [冬月記者★]
- 愛国者「コピーという言葉は、文脈によって複数の意味を持ちます。これは事前通告とは言わない。」 [834922174]
- 【高市遺産】 ユネスコさん。日本の「匠の技」「屋台」「和紙」などを無形文化遺産に登録 🎉🎊 [485983549]
- 1時間後に退職を伝える😡
- 日本人のコメ離れが深刻、おまえらなんでコメ食わないんだ??? [974680522]
- 【画像】クリスマスケーキの予約の電話をしたんだけどすでに予約がいっぱいで断られちゃったよ…
- 自民党のヒゲ「トランプおやびんが中国に何も言ってくれない」 [834922174]
