次スレを立てる時は本文の1行目に以下を追加して下さい。
!extend:on:vvvvv:1000:512
C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。
前スレ
C++相談室 part137 (正しくはpart138)
http://mevius.5ch.net/test/read.cgi/tech/1535353320/
C++相談室 part139
https://mevius.5ch.net/test/read.cgi/tech/1538755188/
C++相談室 part140
https://mevius.5ch.net/test/read.cgi/tech/1547326582/
このスレもよろしくね。
【初心者歓迎】C/C++室 Ver.103【環境依存OK】
https://mevius.5ch.net/test/read.cgi/tech/1530384293/
■長いソースを貼るときはここへ。■
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++相談室 part141
■ このスレッドは過去ログ倉庫に格納されています
2019/02/22(金) 03:07:43.52ID:MgOIx7iK
104デフォルトの名無しさん
2019/03/02(土) 14:47:21.97ID:66qf4QbX えw
実験するのめんどくさいから質問してたわw
ダメだったんだ、ごめんなさい。
実験するのめんどくさいから質問してたわw
ダメだったんだ、ごめんなさい。
105デフォルトの名無しさん
2019/03/02(土) 15:15:55.45ID:oy0Ht86m コンパイルエラーがとれなくて困ってます
■ ヘッダー側
template<class T>
class Test
{
public:
Test(void (*func)(T)) {}
Test(void (*func)(const T&)) {}
};
typedef Test<int *> TestPtr; // テンプレート引数がポインタ型
■ 呼び出し側
static void func1(int *x) {}
static void func2(const int *x) {}
void main()
{
TestPtr test1(func1); // OK
TestPtr test2(func2); // コンパイルエラー
}
VC2008だと以下のエラーになります。
1 番目の引数を 'void (__cdecl *)(const int *)' から 'void (__cdecl *)(T)' に変換できません。
func2みたいにconst付けるとなんでダメなんでしょうか?
■ ヘッダー側
template<class T>
class Test
{
public:
Test(void (*func)(T)) {}
Test(void (*func)(const T&)) {}
};
typedef Test<int *> TestPtr; // テンプレート引数がポインタ型
■ 呼び出し側
static void func1(int *x) {}
static void func2(const int *x) {}
void main()
{
TestPtr test1(func1); // OK
TestPtr test2(func2); // コンパイルエラー
}
VC2008だと以下のエラーになります。
1 番目の引数を 'void (__cdecl *)(const int *)' から 'void (__cdecl *)(T)' に変換できません。
func2みたいにconst付けるとなんでダメなんでしょうか?
106デフォルトの名無しさん
2019/03/02(土) 15:52:41.75ID:0ZOGECoI107デフォルトの名無しさん
2019/03/02(土) 15:54:45.54ID:uEwpVDqh VC++でmsado15.dllをインポートしようとしても参照されずエラーになるのですが原因は何でしょうか?
108デフォルトの名無しさん
2019/03/02(土) 16:25:34.65ID:gxSP/QDn >>107
それだけでわかるか。エラー内容くらい書け
それだけでわかるか。エラー内容くらい書け
109デフォルトの名無しさん
2019/03/02(土) 16:41:21.42ID:uEwpVDqh >>108
C:\Program Files\Common Files\system\ado\msado15.dll に対応するエディターはありません。
このファイルの種類(.dll)のアプリケーションがインストールされていることを確認してください。
重大度レベル コード 説明 プロジェクト ファイル 行 抑制状態
エラー (アクティブ) E1696 ソース ファイルを開けません "C:/Users/owner/Documents/Visual Studio 2017/Projects/20190227/20190227/Debug/msado15.tlh" 20190227 C:\Users\owner\Documents\Visual Studio 2017\Projects\20190227\20190227\Source.cpp 6
ソースは以下の通り
#include <stdio.h>
#include <tchar.h>
#if (WINVER >= 0x0601) // Windows 7 以降
#import "msado60.tlb" no_namespace rename("EOF", "adoEOF")
#else
#import "C:\Program Files\Common Files\system\ado\msado15.dll" no_namespace rename("EOF", "adoEOF")
#endif
C:\Program Files\Common Files\system\ado\msado15.dll に対応するエディターはありません。
このファイルの種類(.dll)のアプリケーションがインストールされていることを確認してください。
重大度レベル コード 説明 プロジェクト ファイル 行 抑制状態
エラー (アクティブ) E1696 ソース ファイルを開けません "C:/Users/owner/Documents/Visual Studio 2017/Projects/20190227/20190227/Debug/msado15.tlh" 20190227 C:\Users\owner\Documents\Visual Studio 2017\Projects\20190227\20190227\Source.cpp 6
ソースは以下の通り
#include <stdio.h>
#include <tchar.h>
#if (WINVER >= 0x0601) // Windows 7 以降
#import "msado60.tlb" no_namespace rename("EOF", "adoEOF")
#else
#import "C:\Program Files\Common Files\system\ado\msado15.dll" no_namespace rename("EOF", "adoEOF")
#endif
110デフォルトの名無しさん
2019/03/02(土) 17:30:18.82ID:oy0Ht86m111デフォルトの名無しさん
2019/03/02(土) 18:12:08.54ID:uEwpVDqh >>109
必要かどうかわからなかったのですが
regsvr32.exeでmsado15.dllを登録
その後いろいろいじってビルドしてみるとコンパイルできました。
ただし出力ができませんでしたがコンパイルはできたのでとりあえず良しとします。
msado15.dllのようなDLLはC(VC)++で扱うのは難しいですね。
インテリセンスが働きませんから…
必要かどうかわからなかったのですが
regsvr32.exeでmsado15.dllを登録
その後いろいろいじってビルドしてみるとコンパイルできました。
ただし出力ができませんでしたがコンパイルはできたのでとりあえず良しとします。
msado15.dllのようなDLLはC(VC)++で扱うのは難しいですね。
インテリセンスが働きませんから…
112デフォルトの名無しさん
2019/03/02(土) 18:48:27.86ID:Gk4CLPf8 「c++ import dll」で検索!
113デフォルトの名無しさん
2019/03/02(土) 20:32:59.25ID:YCnAoXOq マクロは名前空間無いからな
114デフォルトの名無しさん
2019/03/02(土) 22:58:26.16ID:9ABljqhX はじめまして。
C++でスケジューラのようなものを作りたいのですが、
相談に乗っていただけますでしょうか?
C++/MFCのMDIを使用して、ウィンドウ内に複数のウィンドウを配置したいと思っています。
一つのウィンドウにはリスト形式でタスクの一覧を、別のウィンドウでは
ガントチャート形式でタスクの時間ごとにグラフを描画し、その他のウィンドウは各情報を表示出来ればと思っています。
そこで、上記のようなものを作るにあたって、
タスク一覧のウィンドウとガントチャートのウィンドウへドラッグ&ドロップで行き来したいのですが、
そもそもそのような事は可能でしょうか?
また、チャートの描画をするにあたって、グラフは2Dで描画しようと思っているのですが、
2Dのグラフィックライブラリ等を利用した方が簡単に実装出来るでしょうか?
もし良いライブラリ等があればご教示いたければ幸いです。
私自身、開発言語はC++かC#しかまともに使用した経験がないのですが、
実行環境のスペックがあまり高いものを準備出来ないので、
Core2Duo/メモリ2G程度、良くても型落ちのi3程度で、
実行速度も考慮したくC++を選択した次第です。
もし最適な言語や、開発手法があれば教えていただけると嬉しいです。
無知な部分が多いと思いますが、皆さんの意見をお聞かせ頂ければと思いますので、よろしくお願いいたします。
C++でスケジューラのようなものを作りたいのですが、
相談に乗っていただけますでしょうか?
C++/MFCのMDIを使用して、ウィンドウ内に複数のウィンドウを配置したいと思っています。
一つのウィンドウにはリスト形式でタスクの一覧を、別のウィンドウでは
ガントチャート形式でタスクの時間ごとにグラフを描画し、その他のウィンドウは各情報を表示出来ればと思っています。
そこで、上記のようなものを作るにあたって、
タスク一覧のウィンドウとガントチャートのウィンドウへドラッグ&ドロップで行き来したいのですが、
そもそもそのような事は可能でしょうか?
また、チャートの描画をするにあたって、グラフは2Dで描画しようと思っているのですが、
2Dのグラフィックライブラリ等を利用した方が簡単に実装出来るでしょうか?
もし良いライブラリ等があればご教示いたければ幸いです。
私自身、開発言語はC++かC#しかまともに使用した経験がないのですが、
実行環境のスペックがあまり高いものを準備出来ないので、
Core2Duo/メモリ2G程度、良くても型落ちのi3程度で、
実行速度も考慮したくC++を選択した次第です。
もし最適な言語や、開発手法があれば教えていただけると嬉しいです。
無知な部分が多いと思いますが、皆さんの意見をお聞かせ頂ければと思いますので、よろしくお願いいたします。
115さまよえる蟻人間 ◆T6xkBnTXz7B0
2019/03/02(土) 23:07:26.95ID:HH5zv832 それなら、OLE D&Dを実装することになる。具体的には、IDataObject, IDataSource, IDropTargetインターフェースの実装。
116デフォルトの名無しさん
2019/03/02(土) 23:32:17.29ID:4PbQivqk c++でテンプレ使って実装を別ファイルで隠す場合、
// h //////////////////////////////////////////////////
template<typename T> class cls
{
public:
template<typename U> U func();
private:
T var = 0;
};
// cpp1 //////////////////////////////////////////////////
template<> template<> char cls<char>::func<char> { return var; }
template<> template<> int cls<char>::func<int> { return var; }
template<> template<> char cls<int>::func<char> { return var; }
template<> template<> int cls<int>::func<int> { return var; }
// cpp2 //////////////////////////////////////////////////
template<typename T> template<> char cls<T>::func<char>(){ return var; }
template<typename T> template<> int cls<T>::func<int>(){ return var; }
template<> class cls<char>;
template<> class cls<int>;
//////////////////////////////////////////////////
cpp1みたいに全部型指定していく場合はビルド出来るんだけど、
cpp2みたいに別けて型指定していくと出来ない。
cpp2みたいな事を実現可能な方法って無いですかね?
そもそも書き方が間違ってる?
// h //////////////////////////////////////////////////
template<typename T> class cls
{
public:
template<typename U> U func();
private:
T var = 0;
};
// cpp1 //////////////////////////////////////////////////
template<> template<> char cls<char>::func<char> { return var; }
template<> template<> int cls<char>::func<int> { return var; }
template<> template<> char cls<int>::func<char> { return var; }
template<> template<> int cls<int>::func<int> { return var; }
// cpp2 //////////////////////////////////////////////////
template<typename T> template<> char cls<T>::func<char>(){ return var; }
template<typename T> template<> int cls<T>::func<int>(){ return var; }
template<> class cls<char>;
template<> class cls<int>;
//////////////////////////////////////////////////
cpp1みたいに全部型指定していく場合はビルド出来るんだけど、
cpp2みたいに別けて型指定していくと出来ない。
cpp2みたいな事を実現可能な方法って無いですかね?
そもそも書き方が間違ってる?
117さまよえる蟻人間 ◆T6xkBnTXz7B0
2019/03/02(土) 23:37:15.79ID:HH5zv832 ヘッダーで特殊化の方法を指定しないといかんとちゃう? 知らんけど。
118デフォルトの名無しさん
2019/03/02(土) 23:45:00.12ID:0O78HlO0 cls::func()の定義を
U cls::func()
ではなしに、
void cls::func(U& x)
とかにすればおkなキモス、
なおそうするとテンプレートの特殊化以前に関数のオーバーロードで解決できてしまうヨカン、
void cls::func(char& x) { x = (char)var; }
void cls::func(int& x) { x = (int)var; }
void cls::func(double& x) { x = (double)var; }
void cls::func(std::string& x) { x = std::string(var, '0'); }
...
いくらでも作れる……!
U cls::func()
ではなしに、
void cls::func(U& x)
とかにすればおkなキモス、
なおそうするとテンプレートの特殊化以前に関数のオーバーロードで解決できてしまうヨカン、
void cls::func(char& x) { x = (char)var; }
void cls::func(int& x) { x = (int)var; }
void cls::func(double& x) { x = (double)var; }
void cls::func(std::string& x) { x = std::string(var, '0'); }
...
いくらでも作れる……!
119さまよえる蟻人間 ◆T6xkBnTXz7B0
2019/03/02(土) 23:54:10.30ID:HH5zv832 IDataSourceじゃなくてIDropSourceだ。ごめんを。
120デフォルトの名無しさん
2019/03/02(土) 23:59:54.93ID:4PbQivqk121さまよえる蟻人間 ◆T6xkBnTXz7B0
2019/03/03(日) 00:04:53.16ID:KlFuUPR7 特殊化を知らない?
122デフォルトの名無しさん
2019/03/03(日) 00:12:10.08ID:ET38y2ec cpp2の翻訳単位内で完全に実体化させないとどうやっても外からはよべないので
少なくともcpp2の中ではそのように書かないといけないと思う
少なくともcpp2の中ではそのように書かないといけないと思う
123デフォルトの名無しさん
2019/03/03(日) 00:24:16.88ID:kd4WdA4I 確実にcppに実体作りたきゃ明示的インスタンス化は個別にしなきゃ駄目だろ
124デフォルトの名無しさん
2019/03/03(日) 00:24:32.19ID:1zX/ygG4 >>121
この場合の特殊化は、どのような記述になるのでしょうか?
>>122
なるほど、やっぱり無理なんですかね?
これ、元となっているのは、
// h /////////////////////////////////////////////////
template<typename T> class cls
{
public:
int func();
private:
T var;
};
// cpp ////////////////////////////////////////////////////
template<typename T> int cls<T>::func(){ return var; }
template class cls<char>;
/////////////////////////////////////////////////////////////
みたいな感じで func() に戻り値の型指定を追加したいな、
って事でやりはじめたんですよね。
綺麗に書くのが無理そうならば、必要な物を全部書いていきます、、、
この場合の特殊化は、どのような記述になるのでしょうか?
>>122
なるほど、やっぱり無理なんですかね?
これ、元となっているのは、
// h /////////////////////////////////////////////////
template<typename T> class cls
{
public:
int func();
private:
T var;
};
// cpp ////////////////////////////////////////////////////
template<typename T> int cls<T>::func(){ return var; }
template class cls<char>;
/////////////////////////////////////////////////////////////
みたいな感じで func() に戻り値の型指定を追加したいな、
って事でやりはじめたんですよね。
綺麗に書くのが無理そうならば、必要な物を全部書いていきます、、、
125デフォルトの名無しさん
2019/03/03(日) 00:30:05.53ID:AQaNwhGs 要求仕様がいまいちよくわかっていないが(マテ
(1) 任意の型Tの値cls::varから任意の型Uの値を得たい(一種のconverterクラスを作りたい)
(2) 変換関数cls::func()の実装は隠蔽したい
ということならこんなんでど(ry
ttps://ideone.com/1Fh8sg
(1) 任意の型Tの値cls::varから任意の型Uの値を得たい(一種のconverterクラスを作りたい)
(2) 変換関数cls::func()の実装は隠蔽したい
ということならこんなんでど(ry
ttps://ideone.com/1Fh8sg
126デフォルトの名無しさん
2019/03/03(日) 00:38:22.33ID:1zX/ygG4127デフォルトの名無しさん
2019/03/03(日) 00:49:52.61ID:AQaNwhGs >func() の戻り値をテンプレ使用でなんとかする方法が無いのかな、と
func()の戻り値をテンプレにしつつ実装は「完全に」隠蔽したい(ヘッダファイルに書くわけにいかない)となると
やっぱコアとなる変換関数は、必要なTとUの全組み合わせについて「完全に」「非テンプレートで」書かないといけない希ガス
(なぜなら、テンプレートのままcppに書いたら他のcppから呼べない(現行コンパイラはテンプレートの分割コンパイルに対応していない
(2)の隠蔽の要求を多少緩和して、template<class U> void conv(int src, U& dst) { ... } を
ヘッダファイルに書いても良いということならUを返すcls::func()をconv()を1個書いたらできるようにはなる
※ 個人の感想です
※ コードには個人差があります
func()の戻り値をテンプレにしつつ実装は「完全に」隠蔽したい(ヘッダファイルに書くわけにいかない)となると
やっぱコアとなる変換関数は、必要なTとUの全組み合わせについて「完全に」「非テンプレートで」書かないといけない希ガス
(なぜなら、テンプレートのままcppに書いたら他のcppから呼べない(現行コンパイラはテンプレートの分割コンパイルに対応していない
(2)の隠蔽の要求を多少緩和して、template<class U> void conv(int src, U& dst) { ... } を
ヘッダファイルに書いても良いということならUを返すcls::func()をconv()を1個書いたらできるようにはなる
※ 個人の感想です
※ コードには個人差があります
128デフォルトの名無しさん
2019/03/03(日) 00:57:11.45ID:1zX/ygG4129デフォルトの名無しさん
2019/03/03(日) 01:15:53.21ID:AQaNwhGs スマン>>127は言い過ぎたかもしれん…
全組み合わせをcppに書く作業をそのcppの中でテンプレートを定義して省力化することは可能かもしれん
ただし、そのcppの中で定義したのと同じシグネチャ(名前+引数)でユーザーコードが別のテンプレート関数を定義でもしたら、
ODRに違反することになる(この場合実際に変な挙動になる危険性が大きい)ので全体を無名namespaceで囲う必要がありそう
無名namespaceの中から選択的に関数をエクスポートできるのかは正直知らん
あんまりテンプレート絡みで無茶はやりたくナサス
全組み合わせをcppに書く作業をそのcppの中でテンプレートを定義して省力化することは可能かもしれん
ただし、そのcppの中で定義したのと同じシグネチャ(名前+引数)でユーザーコードが別のテンプレート関数を定義でもしたら、
ODRに違反することになる(この場合実際に変な挙動になる危険性が大きい)ので全体を無名namespaceで囲う必要がありそう
無名namespaceの中から選択的に関数をエクスポートできるのかは正直知らん
あんまりテンプレート絡みで無茶はやりたくナサス
130デフォルトの名無しさん
2019/03/03(日) 01:30:06.83ID:kd4WdA4I 定義は共通でして
template int cls<char>::func<int>();
みたいなのを使う分だけ書けば良い
ただ、今回の場合クラス内テンプレート関数の特殊化しようとすると怒られるからさらに工夫が必要
template int cls<char>::func<int>();
みたいなのを使う分だけ書けば良い
ただ、今回の場合クラス内テンプレート関数の特殊化しようとすると怒られるからさらに工夫が必要
131デフォルトの名無しさん
2019/03/03(日) 01:33:24.30ID:ET38y2ec ああ、確かに
使わない関数テンプレートをcppで定義してそれの明示的インスタンス化を通してやれば省力化できそう
この場合その使わない関数テンプレートを内部リンケージにしても、その中で実体化要求されたテンプレートのリンケージには影響はないはず
使わない関数テンプレートをcppで定義してそれの明示的インスタンス化を通してやれば省力化できそう
この場合その使わない関数テンプレートを内部リンケージにしても、その中で実体化要求されたテンプレートのリンケージには影響はないはず
132デフォルトの名無しさん
2019/03/03(日) 02:24:28.96ID:5EsDLzeQ Visual Studioで通ってもgccで通らなかったりするからテンプレートの実体化は厄介。
133デフォルトの名無しさん
2019/03/03(日) 02:47:42.46ID:dVINV85+ もはやコンパイラありきの言語
134デフォルトの名無しさん
2019/03/03(日) 02:53:02.86ID:kd4WdA4I VC++がC++擬きの別言語なだけだろ
今ごろになってやっと2 phase lookup対応させた
structとclassが違うとリンクでこけるのも糞
今ごろになってやっと2 phase lookup対応させた
structとclassが違うとリンクでこけるのも糞
135デフォルトの名無しさん
2019/03/03(日) 03:13:19.05ID:ET38y2ec VS2017以降のMSVCは許してあげてほしい・・・
136デフォルトの名無しさん
2019/03/03(日) 05:50:17.03ID:EorZPwcP えっ、何か革新的なことをしているの?
C++は今までつかったことがなかったんだが、最近マイコンの開発に使ってから
かなり気に入っている。これならPCでも使えるかもと今考えているところ。
C++は今までつかったことがなかったんだが、最近マイコンの開発に使ってから
かなり気に入っている。これならPCでも使えるかもと今考えているところ。
137デフォルトの名無しさん
2019/03/03(日) 06:33:00.88ID:ChZC+e8W 組み込み用途だとC++よりCの方が融通効くと思うんだが
最近の組み込みはひょっとして随分恵まれてるのか
最近の組み込みはひょっとして随分恵まれてるのか
138デフォルトの名無しさん
2019/03/03(日) 07:57:12.43ID:EUJr/Yte ふと思ったんですが、Java でデコレーターを記述するのに
BufferedReader br = new BufferedReader(new InpustStreamReader(System.in));
などと、new したオブジェクトのポインタを取っておかず、new したまま放置してしまう書き方がありますが、
スコープ内で new したオブジェクトは、スコープを外れるときに C++翻訳系が自分で delete する、と決め打ちしてしまうと、互換性で問題がでるでしょうか?
BufferedReader br = new BufferedReader(new InpustStreamReader(System.in));
などと、new したオブジェクトのポインタを取っておかず、new したまま放置してしまう書き方がありますが、
スコープ内で new したオブジェクトは、スコープを外れるときに C++翻訳系が自分で delete する、と決め打ちしてしまうと、互換性で問題がでるでしょうか?
140デフォルトの名無しさん
2019/03/03(日) 10:18:54.68ID:0vjeZZiI そのポインタを別の場所にコピーしてたらどうなる?
頭悪すぎだろ
頭悪すぎだろ
>>140
では、あからさまに new したポインタを捨ててしまっている記述に限り自動で delete する、というのはどうですか?
目的は…classpath を共用したいのです、classpath はあらたに c++ で書くとして
では、あからさまに new したポインタを捨ててしまっている記述に限り自動で delete する、というのはどうですか?
目的は…classpath を共用したいのです、classpath はあらたに c++ で書くとして
142デフォルトの名無しさん
2019/03/03(日) 10:26:03.14ID:0vjeZZiI143デフォルトの名無しさん
2019/03/03(日) 10:31:40.12ID:8Bef4COm よくわかんねえけど楽してJavaを移植したいってこと?
Boehm GCでも使ってみたらどうだ
Boehm GCでも使ってみたらどうだ
145デフォルトの名無しさん
2019/03/03(日) 10:35:19.96ID:oO/57lY2 make_uniqueがやりたいってことかね
>>142
内容を誤解していました、すみません
あらためて回答します
プログラマが new したポインタ値を変数に取っておく記述をした場合は、delete の責任はプログラマにあるものとし、処理系では何もしないものとします
内容を誤解していました、すみません
あらためて回答します
プログラマが new したポインタ値を変数に取っておく記述をした場合は、delete の責任はプログラマにあるものとし、処理系では何もしないものとします
148デフォルトの名無しさん
2019/03/03(日) 10:53:36.82ID:rOejoJLo149デフォルトの名無しさん
2019/03/03(日) 10:59:02.77ID:kd4WdA4I javaでnewしているからってc++でnewするなって
classpath共用が何を意味しているのかは分からんが
classpath共用が何を意味しているのかは分からんが
150デフォルトの名無しさん
2019/03/03(日) 11:02:05.72ID:AQaNwhGs ・繰り返し構文とgotoの全廃
151デフォルトの名無しさん
2019/03/03(日) 11:24:20.63ID:0vjeZZiI152デフォルトの名無しさん
2019/03/03(日) 11:44:43.82ID:lodoh91K >>151
んんー、それは c++ 的な扱い(delete はプログラマの責任)でいいかと、私の思考に何が抜けているのかな?もう少し考えて見ます
んんー、それは c++ 的な扱い(delete はプログラマの責任)でいいかと、私の思考に何が抜けているのかな?もう少し考えて見ます
154デフォルトの名無しさん
2019/03/03(日) 12:18:50.69ID:kd4WdA4I >>139
規格ではdeleteしないものをdeleteしたら互換性に問題が出る。
自動でdeleteしたかったらスマートポインタ使うべき
独自c++擬き想定しているならc++17使うのも当然okのはず
生のnew使わせるなんて今時のc++ではとんでもない悪手
規格ではdeleteしないものをdeleteしたら互換性に問題が出る。
自動でdeleteしたかったらスマートポインタ使うべき
独自c++擬き想定しているならc++17使うのも当然okのはず
生のnew使わせるなんて今時のc++ではとんでもない悪手
155デフォルトの名無しさん
2019/03/03(日) 13:13:27.54ID:5kJ1RFDr VS2017は十分な出来なんだがテンプレートの展開中に内部エラーで転けることがあってそこだけは不満
156デフォルトの名無しさん
2019/03/03(日) 15:47:18.29ID:5EsDLzeQ shared_ptr でJavaやC#のガーベージ・コレクションとほぼ同じ役目が期待できるから別にいいのでは。
C++は、shared_ptrが正式採用されたC++11で別の言語になった印象すらあるわ。
C++は、shared_ptrが正式採用されたC++11で別の言語になった印象すらあるわ。
157デフォルトの名無しさん
2019/03/03(日) 15:57:24.31ID:8Bef4COm 循環参照が検出できないからJavaプログラムの参照をそのまま置き換えればオッケーというわけでもない
もちろんナマポよりは遥かにマシだけど
もちろんナマポよりは遥かにマシだけど
158デフォルトの名無しさん
2019/03/03(日) 15:59:19.15ID:rOejoJLo >>155
面倒だとは思うけど、時間あるなら再現するコードと共にバグ報告送ってやってくれ
面倒だとは思うけど、時間あるなら再現するコードと共にバグ報告送ってやってくれ
159デフォルトの名無しさん
2019/03/03(日) 16:11:53.27ID:E4UxtVYi unique_ptr<hoge> up0(new hoge());
や
shared_ptr<hoge> sp0(new hoge());
と書いたときと
unique_ptr<hoge> up1 = new hoge();
や
shared_ptr<hoge> sp1 = new hoge();
と書いた時で
違いは生じますか?
生じるとしたらどんな違いですか?
や
shared_ptr<hoge> sp0(new hoge());
と書いたときと
unique_ptr<hoge> up1 = new hoge();
や
shared_ptr<hoge> sp1 = new hoge();
と書いた時で
違いは生じますか?
生じるとしたらどんな違いですか?
160デフォルトの名無しさん
2019/03/03(日) 16:19:53.78ID:D2G4oQ9F 副業解禁で激変する若者世代とマネージャー世代のキャリア観
https://www.businessinsider.jp/post-107782
フリーランスの職種20個の仕事内容と平均年収をわかりやすく解説
https://www.proof0309.com/entry/shokushu
時給1万円のバイトも。会社員向きのプチ副業を、“バイト芸人”が教える
https://headlines.yahoo.co.jp/article?a=20190226-00127948-bizspa-bus_all
副業が「会社にバレる人」と「バレない人」の大差
https://headlines.yahoo.co.jp/article?a=20190303-00268007-toyo-bus_all
正社員の10%以上が副業 中には過重労働で体調崩す人も
https://headlines.yahoo.co.jp/hl?a=20190227-00010000-wordleaf-bus_all
「副業で年2000万円稼ぐ男」に学ぶキャリア戦略
https://headlines.yahoo.co.jp/article?a=20190221-00266856-toyo-bus_all
加速する「副業社会」正社員の4割が「副業したい」 気になる収入はどれくらい?
https://headlines.yahoo.co.jp/hl?a=20190218-00010001-danro-life
おすすめ副業22選を現役フリーランスが解説【在宅も可能】
https://www.proof0309.com/entry/zaitaku-hukugyou
会社を辞めてフリーランスで働きたいあなたが知っておくべき10のこと
https://www.businessinsider.jp/post-165731
フリーランスと会社員、働き方の根本的な差 広がる「雇用されない働き方」の課題とは何か
https://toyokeizai.net/articles/-/263055
フリーランス人口は増える!今後は仕事もプロジェクト単位になる!?
https://freelance.mts-career.com/population/
https://www.businessinsider.jp/post-107782
フリーランスの職種20個の仕事内容と平均年収をわかりやすく解説
https://www.proof0309.com/entry/shokushu
時給1万円のバイトも。会社員向きのプチ副業を、“バイト芸人”が教える
https://headlines.yahoo.co.jp/article?a=20190226-00127948-bizspa-bus_all
副業が「会社にバレる人」と「バレない人」の大差
https://headlines.yahoo.co.jp/article?a=20190303-00268007-toyo-bus_all
正社員の10%以上が副業 中には過重労働で体調崩す人も
https://headlines.yahoo.co.jp/hl?a=20190227-00010000-wordleaf-bus_all
「副業で年2000万円稼ぐ男」に学ぶキャリア戦略
https://headlines.yahoo.co.jp/article?a=20190221-00266856-toyo-bus_all
加速する「副業社会」正社員の4割が「副業したい」 気になる収入はどれくらい?
https://headlines.yahoo.co.jp/hl?a=20190218-00010001-danro-life
おすすめ副業22選を現役フリーランスが解説【在宅も可能】
https://www.proof0309.com/entry/zaitaku-hukugyou
会社を辞めてフリーランスで働きたいあなたが知っておくべき10のこと
https://www.businessinsider.jp/post-165731
フリーランスと会社員、働き方の根本的な差 広がる「雇用されない働き方」の課題とは何か
https://toyokeizai.net/articles/-/263055
フリーランス人口は増える!今後は仕事もプロジェクト単位になる!?
https://freelance.mts-career.com/population/
161デフォルトの名無しさん
2019/03/03(日) 17:35:34.30ID:8Bef4COm162デフォルトの名無しさん
2019/03/03(日) 17:53:40.63ID:E4UxtVYi make_shared使った方が良い?
163デフォルトの名無しさん
2019/03/03(日) 19:22:53.95ID:8Bef4COm うん
164デフォルトの名無しさん
2019/03/04(月) 04:26:14.48ID:FZO2lxM7 new 呼び出しが少なければ少ないほど精神衛生に良い。
165デフォルトの名無しさん
2019/03/04(月) 06:09:53.20ID:eTdHd+Gg 複数の関数の戻り値を足し合わせる処理で、それぞれの関数の戻り値をチェックしたい場合のすっきりする方法は何かありますか?
std::string result;
result += func1(a);
result += func2(b);
result += func3(c);
の各func1,2,3の戻り値をresultに足す前に空でないかを確認したいのです (1つでも空があった場合はresultも空にしたい)
単純に一時変数を用意して一つずつ判定するしかありませんか?
std::string result;
result += func1(a);
result += func2(b);
result += func3(c);
の各func1,2,3の戻り値をresultに足す前に空でないかを確認したいのです (1つでも空があった場合はresultも空にしたい)
単純に一時変数を用意して一つずつ判定するしかありませんか?
166デフォルトの名無しさん
2019/03/04(月) 06:27:48.33ID:iluilBaY typename Iterator::container_type::value_type
こんな風に::で三個つなげるのは合法ですかね??
こんな風に::で三個つなげるのは合法ですかね??
167デフォルトの名無しさん
2019/03/04(月) 06:31:54.66ID:nFXsjzZK エイリアス使えば
168デフォルトの名無しさん
2019/03/04(月) 06:33:10.80ID:7Cz1/mIW funcN() を追加する直前の result.size() を記憶しておいて、
足した後に長さが増えてなかったら、今呼んだ funcN() の結果は空だった、
と判定することはできるか。
string から整数になるだけで、一時変数を使うのは変わらない上に、
処理内容が分かりやすくなるわけでもないけど。
足した後に長さが増えてなかったら、今呼んだ funcN() の結果は空だった、
と判定することはできるか。
string から整数になるだけで、一時変数を使うのは変わらない上に、
処理内容が分かりやすくなるわけでもないけど。
169デフォルトの名無しさん
2019/03/04(月) 07:56:06.21ID:EZgqhZII >>165
例外
例外
170デフォルトの名無しさん
2019/03/04(月) 08:09:41.73ID:t1tsHTRA >>166
合法
合法
171デフォルトの名無しさん
2019/03/04(月) 15:31:21.38ID:V3vkr0fP unique_ptr<int> u(new int[2]{4, 5}); // OK (A) -> int * が作られる u.get()[n] でアクセス可能 *u だめ
unique_ptr<int> u = make_unique<int>(6); // OK -> int * が作られる *u でアクセス可能 u[0] だめ
unique_ptr<int[]> u = make_unique<int[]>(2); // OK (B) -> int [] が作られる u[n] でアクセス可能 *u だめ *u.get() 可能
unique_ptr<int *> u = make_unique<int>(2); // コンパイルエラー (C)
unique_ptr<int *> u = make_unique<int *>(2); // コンパイルエラー (D)
unique_ptr<int *> u(new int *); // ok -> int ** が作られる *u = &hoge あれば **u でアクセス可能
(C)(D)がエラーになる理由と
(B)を(A)の様に同時に初期化したいとき
どう書けば良いか知りたいです
unique_ptr<int> u = make_unique<int>(6); // OK -> int * が作られる *u でアクセス可能 u[0] だめ
unique_ptr<int[]> u = make_unique<int[]>(2); // OK (B) -> int [] が作られる u[n] でアクセス可能 *u だめ *u.get() 可能
unique_ptr<int *> u = make_unique<int>(2); // コンパイルエラー (C)
unique_ptr<int *> u = make_unique<int *>(2); // コンパイルエラー (D)
unique_ptr<int *> u(new int *); // ok -> int ** が作られる *u = &hoge あれば **u でアクセス可能
(C)(D)がエラーになる理由と
(B)を(A)の様に同時に初期化したいとき
どう書けば良いか知りたいです
172デフォルトの名無しさん
2019/03/04(月) 17:39:35.24ID:rgTuscQv C 型が違う
D int*が2から作れない
D int*が2から作れない
173デフォルトの名無しさん
2019/03/04(月) 19:03:47.51ID:iluilBaY >>170
どうもありがとう。
どうもありがとう。
174165
2019/03/04(月) 22:26:16.82ID:eTdHd+Gg175デフォルトの名無しさん
2019/03/04(月) 23:05:47.73ID:IrD+1pkV void f()
{
static std::mutex mtx;
std::lock_guard<std::mutex> lock(mtx);
//何がしかの処理
}
これっていいの?
{
static std::mutex mtx;
std::lock_guard<std::mutex> lock(mtx);
//何がしかの処理
}
これっていいの?
176デフォルトの名無しさん
2019/03/04(月) 23:25:00.41ID:tJNb7RRD C++11以降はセーフ、じゃなかったかな。
177デフォルトの名無しさん
2019/03/05(火) 00:17:46.56ID:w8adCz4V セーフなわけがあるか!!1111!11!!!!1!
178デフォルトの名無しさん
2019/03/05(火) 00:55:28.26ID:Lvsoqpfj C++11だろうがなかろうが関係なくセーフだよ。
179KAC
2019/03/05(火) 01:01:35.52ID:zhV7s4kG 人によってセーフの定義が違ってたりしない?
180デフォルトの名無しさん
2019/03/05(火) 01:03:06.00ID:w8adCz4V C++11以降はセーフになったらしい(キリ
ttps://cpprefjp.github.io/lang/cpp11/static_initialization_thread_safely.html
ttps://cpprefjp.github.io/lang/cpp11/static_initialization_thread_safely.html
181デフォルトの名無しさん
2019/03/05(火) 01:04:55.09ID:w8adCz4V Double Checked Lockingはジャヴァのメモリモデルがうまく対応できてなくて騒ぎになったことがある技法
182デフォルトの名無しさん
2019/03/05(火) 01:11:12.97ID:w8adCz4V もし関数内static変数の初期化をDouble Checked Lockingを使わずにスレッドセーフにしようとしたら、
関数に入る度に毎回馬鹿正直にクリティカルセクションに入るために1000クロックぐらい捨てることになってしまうま
スピンロックか何かの黒魔術で若干緩和する実装も有り得るかもしれんが基本は
ジャヴァではなくてC++の処理系がdouble checked lockingする分には
処理系がサポートするネイティブなアーキテクチャのみ考えれば良いから
問題が生じることは無いはずでとりあえずはめでたいと思うが、
関数に入る度に毎回馬鹿正直にクリティカルセクションに入るために1000クロックぐらい捨てることになってしまうま
スピンロックか何かの黒魔術で若干緩和する実装も有り得るかもしれんが基本は
ジャヴァではなくてC++の処理系がdouble checked lockingする分には
処理系がサポートするネイティブなアーキテクチャのみ考えれば良いから
問題が生じることは無いはずでとりあえずはめでたいと思うが、
183デフォルトの名無しさん
2019/03/05(火) 01:34:00.08ID:Lvsoqpfj グローバルなスタティック変数のように実行前に初期化する仕様にいまさら変えられない事情でもあったか。
184デフォルトの名無しさん
2019/03/05(火) 01:38:41.08ID:w8adCz4V リンカにシンボルを渡す手段がイマイチ決め手に欠くキモス
185デフォルトの名無しさん
2019/03/05(火) 01:40:59.82ID:w8adCz4V あと複数の翻訳単位間ではグローバル変数の初期化順序は保証されない(保証しようが無い)から
そういう混乱を避けるために関数内staticは関数に入ったとき初期化されてホスイ
個人的には使わないから知らんが
そういう混乱を避けるために関数内staticは関数に入ったとき初期化されてホスイ
個人的には使わないから知らんが
186デフォルトの名無しさん
2019/03/05(火) 02:16:13.00ID:VDry4yCP >>171
unique_ptr<int[]> u(new int[2]{6, 7});
unique_ptr<int[]> u(new int[2]{6, 7});
187デフォルトの名無しさん
2019/03/05(火) 02:54:35.71ID:YOwkwz81 std::dynarray ってどこ行ったん?
http://ezoeryou.github.io/boost-benkyokai-sapporo
http://ezoeryou.github.io/boost-benkyokai-sapporo
188デフォルトの名無しさん
2019/03/05(火) 03:25:14.57ID:VDry4yCP なんだろう
この違和感
この違和感
189デフォルトの名無しさん
2019/03/05(火) 04:45:14.68ID:mm49B1QN ライブラリを作るときは、hpp にはクラスの定義を、cpp には実装を書く、と理解しています。
クラスのメンバでない関数はどう扱うべきでしょうか。
hpp にプロトタイプ宣言を、cpp に中身を書く、というので合っていますか。
クラスのメンバでない関数はどう扱うべきでしょうか。
hpp にプロトタイプ宣言を、cpp に中身を書く、というので合っていますか。
190デフォルトの名無しさん
2019/03/05(火) 04:47:10.42ID:VDry4yCP inlineは?
191デフォルトの名無しさん
2019/03/05(火) 04:50:23.83ID:xaYVlIsQ なぜヘッダはクラス限定だとおもったんだ?
それ以前にクラス以外では使用したことがないのか?
それ以前にクラス以外では使用したことがないのか?
192デフォルトの名無しさん
2019/03/05(火) 05:01:47.80ID:OG2z9OX5 宣言(Declaration)と定義(Definition)は用語なんで覚えといた方がいいよ
193デフォルトの名無しさん
2019/03/05(火) 05:18:53.19ID:3HlR5qin ヘッダに書くのはクラスだから関数だからとかじゃなくて、複数の翻訳単位(≒cpp)で共通で使うかどうかで決まる
1つのcppの中でしか使わず外に見せないクラスや関数はcppの中でいいよ
1つのcppの中でしか使わず外に見せないクラスや関数はcppの中でいいよ
194デフォルトの名無しさん
2019/03/05(火) 05:48:49.52ID:mm49B1QN195デフォルトの名無しさん
2019/03/05(火) 05:55:22.28ID:3HlR5qin ライブラリなんだろ?
自分はcpp1つでも、他の人のcppで使わせるためのクラスや関数があるはずだ
それをヘッダに書け
自分はcpp1つでも、他の人のcppで使わせるためのクラスや関数があるはずだ
それをヘッダに書け
196デフォルトの名無しさん
2019/03/05(火) 05:59:24.21ID:mm49B1QN >>195
その際、「プロトタイプ宣言はヘッダで、中身は cpp ファイルに」というルールかマナーか慣習はありますか
その際、「プロトタイプ宣言はヘッダで、中身は cpp ファイルに」というルールかマナーか慣習はありますか
197デフォルトの名無しさん
2019/03/05(火) 06:13:55.29ID:Lvsoqpfj >>196
特にないから適当に他人のマネしとけばいいと思う。
特にないから適当に他人のマネしとけばいいと思う。
198デフォルトの名無しさん
2019/03/05(火) 11:45:31.15ID:HwCl8Q1J199はちみつ餃子 ◆8X2XSCHEME
2019/03/05(火) 12:27:38.14ID:mHzXPPXa 内部リンケージにするには static を付けるよりも
無名の namespace に入れる方が良いやり方
みたいな雰囲気があるんだけど、
インデントが深くなるのがなんか嫌なんだよね。
インデントは文法に影響しないわけだから、
付けないという選択肢もとれるけど、
それはそれでなんだかなぁって感じだし、
結局は static を付けちゃうんよ。
無名 (unnamed) namespace って使う?
無名の namespace に入れる方が良いやり方
みたいな雰囲気があるんだけど、
インデントが深くなるのがなんか嫌なんだよね。
インデントは文法に影響しないわけだから、
付けないという選択肢もとれるけど、
それはそれでなんだかなぁって感じだし、
結局は static を付けちゃうんよ。
無名 (unnamed) namespace って使う?
200デフォルトの名無しさん
2019/03/05(火) 12:35:48.55ID:zIeyIuEy 関数よりファンクタの方が速いという情報を見たのですが、メンバ関数を入れ子クラスでメンバファンクタ化すると高速化が期待できますか?
201デフォルトの名無しさん
2019/03/05(火) 12:41:35.39ID:xaYVlIsQ コンパイラ次第だろ
実験
実験
202デフォルトの名無しさん
2019/03/05(火) 12:50:59.28ID:zIeyIuEy VC2017で試したのですがテスト用の関数が単純すぎるのかグローバルのインライン関数、クラスのメンバ関数、クラスのメンバファンクタで差異が見られませんでした・・・
203デフォルトの名無しさん
2019/03/05(火) 12:51:22.93ID:fI+Bf2nm どこに書いてもいいだろ
他人の書いたコードなんてどうせ誰も読まないし
読ませたいならドキュメントしっかりさせたほうがいい
他人の書いたコードなんてどうせ誰も読まないし
読ませたいならドキュメントしっかりさせたほうがいい
204デフォルトの名無しさん
2019/03/05(火) 15:12:40.70ID:pv9Sbimr■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 空自機レーダー照射、音声データ公開 中国 [蚤の市★]
- 【和訳付き】レーダー照射問題 中国軍と自衛隊との“音声データ”公開 中国国営メディア [♪♪♪★]
- 「中国側も日本機のレーダーを感知していた」 中国メディアが報道 [♪♪♪★]
- 【YouTuber】バイク事故で入院のゆたぼん、振込で「お見舞金」募る [muffin★]
- 日銀「歴史的」利上げ迫る 35年ぶりの年間上げ幅、0.5%の壁を突破 [蚤の市★]
- 堀江貴文、キャッシュレス非対応の店にモヤッ 『PayPay』立ち上げの人物にまさかの直談判「現金決済しかできないんだけど…」 [冬月記者★]
- 年末ジャップ、メルカリが売れまくる… [667744927]
- 【悲惨】中国軍が自衛隊に「事前通告」し自衛隊も返答した音声が公開されてしまうwwwこれは高市チェックアウトゕ [597533159]
- 【悲惨】中国軍が自衛隊に「事前通告」し自衛隊も返答した音声が公開されてしまうwwwこれは高市チェックアウトゕ★2 [597533159]
- 現役JKのお茶会スレ( ¨̮ )︎︎𖠚ᐝ180
- 【悲報】JA「全然米が売れなくて倉庫を圧迫してる。助けて!」米卸売り業者「安売りしたら赤字になる…助けて!」 [802034645]
- 【急募】佐藤健(37)さんが急にバカにされ始めた理由WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW
