C++相談室 part63
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2008/09/11(木) 23:49:17ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレに
お願いします。
前スレ
C++相談室 part63
http://pc11.2ch.net/test/read.cgi/tech/1217008269/
0153デフォルトの名無しさん
2008/10/04(土) 18:05:30用途によって変わると思うのだが
開発効率あげたければBorland C++Builder
API直だたきしてGUIアプリ作りたければM$ Visual C++ 6.0, M$ Visual Studio 200x
C++の勉強程度ならBorland C++ Compiler とか GNU Compiler Collection
とか、プロトタイプ程度でわざわざVC++やVSのC++立ち上げるの嫌だしな
いま手に入るか知らないが、M$ Visual C++ 6.0は軽くていいよ
0154デフォルトの名無しさん
2008/10/04(土) 18:06:140155デフォルトの名無しさん
2008/10/04(土) 18:06:260156デフォルトの名無しさん
2008/10/04(土) 18:16:02自己代入に対応してないことと、
E::operator =が例外を投げない保障をしない場合に例外安全にならないこと
くらいじゃないかな…
0157デフォルトの名無しさん
2008/10/04(土) 18:22:29それとE::operator []の戻り値の型のoperator = かな
0158146
2008/10/04(土) 18:27:18オブジェクトが同じ集成体にない場合、< の結果は未規定なのでできないようです。
ポインタを十分な大きさの整数に reinterpret_cast した場合、その整数は元のポインタに戻せるので
ポインタと変換された整数は1対1の関係ということになり、その整数を < で比較できます。
ただし十分な大きさの整数が存在するかどうかは処理系によるので、オブジェクトごとに一意の
整数 ID を持たせるしかないかもしれません。
0159デフォルトの名無しさん
2008/10/04(土) 21:23:08>オブジェクトが同じ集成体にない場合、< の結果は未規定なのでできないようです。
std::less にはその制限がないから大丈夫。
> 14882:2003 20.3.3/8
>For templates greater, less, greater_equal, and less_equal, the specializations for any
>pointer type yield a total order, even if the built-in operators <, >, <=, >= do not.
0160146
2008/10/04(土) 21:59:13単に operator< を関数オブジェクトにするのが目的だと思っていました。
ありがとうございました。
0162デフォルトの名無しさん
2008/10/04(土) 23:28:29operator T&()とoperator const T&() constは両方とも用意するのが普通
016393
2008/10/05(日) 00:31:15環境は、VC++6.0。
template <typename T>
class CNumeric
{
T m_Value;
public:
CNumeric(T val=0) : m_Value(val) {}
T operator=(T val) { return m_Value=val; }
operator T() const { return m_Value; }
operator T&() { return m_Value; }
operator const T&() const { return m_Value; }
};
typedef CNumeric<int> CInt32;
CInt32 a=1, b=2, c;
c = a+b;
0164デフォルトの名無しさん
2008/10/05(日) 00:36:500165デフォルトの名無しさん
2008/10/05(日) 00:51:40そういう自分もVC6物件のメンテナンスを2件抱えている。もうすぐ1件に減るけど
016693
2008/10/05(日) 01:04:48外注からバージョンアップ費用出せと脅されるわ、金無いわで、どうしようもないんだよな。
といっても、いつまでもVC6使ってる訳にもいかないし。
0167デフォルトの名無しさん
2008/10/05(日) 01:56:49016893
2008/10/05(日) 02:02:28ノウハウ握られ過ぎてるんだわ。
0169デフォルトの名無しさん
2008/10/05(日) 02:03:49問題領域にもよるけどね
システムの性質しだいでは莫大な費用が発生する
0170デフォルトの名無しさん
2008/10/05(日) 06:04:47どこがだめなんだろうか?
int OCTAVE_iFFT( double *OCT_POW, int DATASIZE, double *OCT_BUF)
{
ComplexMatrix originalData( DATASIZE/2, 1, 0.0 ) ;
for( int ii=0; ii<DATASIZE/2; ii++ ){
originalData( ii, 0 ).real() = OCT_POW[ii] ;
}
ComplexMatrix ifourierData = originalData.ifourier() ;
for( int ii=0; ii<DATASIZE; ii++ )
OCT_BUF[ii] = ifourierData( ii, 0 ).real() ;
return 0 ;
}
0171デフォルトの名無しさん
2008/10/05(日) 08:47:28どこがうまくいかないのだろうか?
0172デフォルトの名無しさん
2008/10/05(日) 10:54:05あるデータをFFT->逆FFTにしても、まったく別のデータとなります。
>170
のソースで引数は、
double *OCT_POW:スペクトルデータ
int DATASIZE:データ長
double *OCT_BUF:音データ
で、意識的に意味合いを持たせているのは、
1つ目のfor:FFT後のデータの後半は対称なので、前半半分を逆フーリエ変換の対象としている。
1つ目のforの中身:実部にデータを代入。虚部=0。(originalData自体にデータを代入したが変化なし。)
です。
お願いします。
0173デフォルトの名無しさん
2008/10/05(日) 12:35:37まず、全域を計算対象にして、正弦波をぶち込んで、FFTが正しく行われているか確認し、次に逆FFTが正しく行われているか確認する。
その後いろいろ弄れ
0174デフォルトの名無しさん
2008/10/05(日) 14:29:39FFTの動作は確認済です。
色々とやってみます。
0175デフォルトの名無しさん
2008/10/05(日) 15:36:00フーリエ変換する最初からやってました。
"全域で"できました。
ありがとうございました。
0176デフォルトの名無しさん
2008/10/05(日) 23:06:16下のように、char型の配列に1バイト文字、2バイト文字混合の文字列を入れたとして、
char test[] = "abcあいうえお";
test[x]が1バイト文字の一部なのか、2バイト文字の前半なのか、後半なのかを判別する方法はないでしょうか?
よろしくお願いします。
0177デフォルトの名無しさん
2008/10/05(日) 23:07:240178デフォルトの名無しさん
2008/10/05(日) 23:11:440179デフォルトの名無しさん
2008/10/06(月) 00:03:15typedef enum {
NONE = 0x00000000,
A = 0x00000001,
B = 0x00000010,
C = 0x00000100
} Unko;
int main(int ac, char** av) {
// Unko unko = A; OK
Unko unko = A | B;
std::cout << std::hex << unko << std::endl;
return 0;
}
0180デフォルトの名無しさん
2008/10/06(月) 00:18:07Unko
0181デフォルトの名無しさん
2008/10/06(月) 00:24:47キャストでもしない限り警告は出るだろ
エラーはぱっと見分からん
0182デフォルトの名無しさん
2008/10/06(月) 00:26:15Unko に D = 0x11 を定義すれば OK じゃね?
0183179
2008/10/06(月) 00:29:20main.cpp:13: error: invalid conversion from ‘int’ to ‘Unko’
ってでてます。 昔をとくにErrorとかWarningなしで通ってた気がするのですが。。。
0184デフォルトの名無しさん
2008/10/06(月) 00:32:07enum→intはできる
0185デフォルトの名無しさん
2008/10/06(月) 00:32:44AはUnko型
BもUnko型
CもUnko型
しかし、A|Bはint型
そんな未知の値をUnko型にはコンバート出来んよ
そもそもint型でウケるべきでは?
列挙型の意味理解してる?ただの定数じゃないぞ
0186デフォルトの名無しさん
2008/10/06(月) 00:46:23Cでは暗黙変換で通る。C++では明示的なキャストがないと通らない。
0187デフォルトの名無しさん
2008/10/06(月) 00:48:54Unko operaotr |(Unko lhs, Unko rhs)
{
return static_cast<Unko>(lhs | rhs);
}
0188デフォルトの名無しさん
2008/10/06(月) 00:50:200189デフォルトの名無しさん
2008/10/06(月) 00:54:370190デフォルトの名無しさん
2008/10/06(月) 01:27:440191デフォルトの名無しさん
2008/10/06(月) 01:39:26目的による
0192デフォルトの名無しさん
2008/10/06(月) 01:46:45オレにとっては STL map スゲーだった
でも、C++から始める人には何がスゲーのか分からんだろうな
0193デフォルトの名無しさん
2008/10/06(月) 11:53:400194デフォルトの名無しさん
2008/10/06(月) 12:18:14Cは使えるC++初心者なら、ifとswitchが全然ないプログラムを見せてやれ。
0195デフォルトの名無しさん
2008/10/06(月) 12:35:10こうですか?わかりません><
#include <cstdio>
using namespace std;
class Manko {
public:
void hoge1(){printf("1\n");}
void hoge2(){printf("2\n");}
};
void hoge(int i)
{
void (Manko::*p[])() = {&Manko::hoge1,&Manko::hoge2};
(*p[i])();
}
0196デフォルトの名無しさん
2008/10/06(月) 13:04:29boostのspiritなんかも面白いかもね
0197デフォルトの名無しさん
2008/10/06(月) 13:13:290198デフォルトの名無しさん
2008/10/06(月) 14:17:57このほうが良くないですか?って言われて終了
void hoge(int i)
{
printf("%d\n", i+1);
}
0199デフォルトの名無しさん
2008/10/06(月) 14:27:39しかしMSCのかなり前のバージョンから使ってたなあ、それ。
0200デフォルトの名無しさん
2008/10/06(月) 15:55:270201デフォルトの名無しさん
2008/10/06(月) 20:39:570202デフォルトの名無しさん
2008/10/06(月) 21:55:570203デフォルトの名無しさん
2008/10/06(月) 21:58:260204デフォルトの名無しさん
2008/10/06(月) 22:15:090205デフォルトの名無しさん
2008/10/06(月) 23:15:27> void (Manko::*p[])() = {&Manko::hoge1,&Manko::hoge2};
なんだこれwww
文法エラー
しかもstaticじゃないと関数ポインタ取得できない
0206デフォルトの名無しさん
2008/10/06(月) 23:33:39まぁ呼び出しの方はおかしいけど
0207デフォルトの名無しさん
2008/10/06(月) 23:38:14using namespace std;
class Manko {
public:
void hoge1() {printf("1\n"); }
void hoge2() {printf("2\n"); }
};
int main()
{
void (Manko::*p[])() = {&Manko::hoge1, &Manko::hoge2};
Manko m;
(m.*p[0])();
(m.*p[1])();
}
0208デフォルトの名無しさん
2008/10/06(月) 23:41:49ほほぅ
インスタンスって知ってますか?www
関数ポインタ変数にメンバ関数ポインタとやらを代入して、
関数ポインタ変数越しに呼び出すコードを晒して下さい
コンパイルが通るコードね
0209208
2008/10/06(月) 23:43:14これはひどいwww
何がしたいの?www
0210デフォルトの名無しさん
2008/10/06(月) 23:43:48お前は一体何を・・・
0211デフォルトの名無しさん
2008/10/06(月) 23:44:47初期化子について勉強しなおしたほうがいい
0212208
2008/10/06(月) 23:48:35なんで突然初期化子が出てくんだよwww
あぁあれか、馬鹿の一つ覚えってやつかな?www
0213デフォルトの名無しさん
2008/10/07(火) 00:03:22テンプレート使ったときのエラーメッセージ見せる方が効果的。
「この数千文字のエラーはね、constがないってコンパイラが怒ってるんだよ」
0214デフォルトの名無しさん
2008/10/07(火) 00:04:44そういうことを言いたいのではなさそうだな?
0215デフォルトの名無しさん
2008/10/07(火) 00:22:330216デフォルトの名無しさん
2008/10/07(火) 00:25:170217デフォルトの名無しさん
2008/10/07(火) 00:25:28悪いことは言わん、お前が逃げろ
今すぐにだ
0218デフォルトの名無しさん
2008/10/07(火) 00:27:29はいどうぞwwwww
0219デフォルトの名無しさん
2008/10/07(火) 00:27:520222デフォルトの名無しさん
2008/10/07(火) 00:33:110223208
2008/10/07(火) 00:33:19>>218は頭悪そうだなwww
0224デフォルトの名無しさん
2008/10/07(火) 00:35:180225デフォルトの名無しさん
2008/10/07(火) 00:36:110226デフォルトの名無しさん
2008/10/07(火) 00:41:350227208
2008/10/07(火) 00:42:01理解していない馬鹿はお前
thisが関数ポインタとでも?www
0228デフォルトの名無しさん
2008/10/07(火) 00:42:090229デフォルトの名無しさん
2008/10/07(火) 00:43:050230208
2008/10/07(火) 00:44:03お前も何言ってんだ?www
0231デフォルトの名無しさん
2008/10/07(火) 00:44:06http://www.geocities.jp/ky_webid/cpp/language/034.html
0232デフォルトの名無しさん
2008/10/07(火) 00:44:54あれ?こいつ207じゃね?
0233デフォルトの名無しさん
2008/10/07(火) 00:46:10お前が207叩くから恥かいた
謝れよ
0234デフォルトの名無しさん
2008/10/07(火) 00:47:44207も謝れ
0235208
2008/10/07(火) 00:48:42こういう構文もあるのか、しらんかったorz
まったく実用性ないが
でも誤ろうとは思わない
0236デフォルトの名無しさん
2008/10/07(火) 00:50:13新しい機能だろ?こんな変なの
0237208
2008/10/07(火) 00:51:52void (CSample::*pFunc)() = &CSample::func;
この時点でメンバ関数ポインタを取得っておかしくね?
0238デフォルトの名無しさん
2008/10/07(火) 00:53:53そういうものだと思うしかないんだろ
0239デフォルトの名無しさん
2008/10/07(火) 00:56:00別におかしくないよ。
0240デフォルトの名無しさん
2008/10/07(火) 00:57:41どうやってfuncなるメンバ関数を特定するのかとても不可解です
0241208
2008/10/07(火) 01:01:53そして、呼び出し時にインスタンスを指定したところで、
インスタンスのポインタ+オフセットをcallみたいなことなのかな?
ん〜、どう見ても使えんwww
0242デフォルトの名無しさん
2008/10/07(火) 01:01:59インスタンス付けて実際に呼ぶまで実際に呼ぶ関数は決まりません(virtualの場合)
0243デフォルトの名無しさん
2008/10/07(火) 01:02:01class CSample { void func(); };
void (CSample::*pFunc)() = &CSample::func;
(obj.*pFunc)();
↓
void func(CSample *this);
void (*pFunc)(CSample*) = &func;
(*pFunc)(&obj);
0244デフォルトの名無しさん
2008/10/07(火) 01:02:390245デフォルトの名無しさん
2008/10/07(火) 01:05:590246デフォルトの名無しさん
2008/10/07(火) 01:08:47全部の機能が何かの役に立つわけではないだろう
0247デフォルトの名無しさん
2008/10/07(火) 01:09:410248208
2008/10/07(火) 01:14:02呼び出す時にインスタンス指定しなきゃいけないんだろ?
関数ポインタっつってるけど、
これ関数ポインタじゃねーじゃんwww
0249デフォルトの名無しさん
2008/10/07(火) 01:15:53納得いかないなら自分でthisとメンバ関数ポインタのペア作れよ、テンプレート使えば汎用的だし簡単にできるぞ
0250デフォルトの名無しさん
2008/10/07(火) 01:21:080251デフォルトの名無しさん
2008/10/07(火) 01:26:01無理に使う必要は無いが、使ったほうが楽になる場面というのはあるもんなんだぜ。
0252デフォルトの名無しさん
2008/10/07(火) 01:30:26■ このスレッドは過去ログ倉庫に格納されています