人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

Visual C++について質問です。変数の値により、インクルードするヘッダーファイルを変更することはできますか?もしできるようでしたら方法を教えてください。

●質問者: harunoharuno
●カテゴリ:コンピュータ
✍キーワード:C++ インクルード ファイル 変数
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● YOSIZO
●100ポイント

ヘッダーを動的に変更して何がしたいか不明なのですが、基本的には出来ないと思ってください。

インクルードファイルはプリプロセッサで読み込まれるため、コンパイル以前に静的なコードとして展開されます。

つまり、変数の値(処理結果)によって読み込むヘッダーファイルを変更する事は出来ません。

関数の名前は同じだけど、変数の値によって結果を変えたいような場合はdll(ダイナミックリンクライブラリ)を使うか、オブジェクト指向的にFactoryMethodパターンあたりを使ってみてはどうでしょうか?


あなたが何をやりたいかによってアプローチは変わってきます。

まずは、質問の状況で何をしたいのかをハッキリできれば、もっと有意な回答が得られるかと思います。

◎質問者からの返答

どうも有難うございます。

具体的には

初期化ファイルから言語設定を読み込み、

英語だったら、英語の出力文字を定義しているヘッダーを

日本語だったら日本語用の出力文字を定義しているヘッダーを

よめたら嬉しいなとおもって質問しました。

回答していただいた内容をもとに調べてみます。

追加情報などもありましたら是非勉強したいので

教えてください。宜しくお願いします。

デファインを同じ名前でつ


2 ● y-kawaz
●100ポイント ベストアンサー

>英語用出力文字定義ヘッダーや日本語用出力文字定義ヘッダーを用意して…

そういう場合はヘッダファイルではなく gettext 等で外部リソース化するのが一般的な手法かと思います。

◎質問者からの返答

一般的な手法・・・勉強します。回答どうも有難うございました。


3 ● angemaries
●100ポイント

先行の回答者が回答しているとおり、#includeはプリプロセッサで処理され

宣言部分がそのままインクルードファイルで置き換えられます。

ですので、#includeはどこにおいてもうごくはずです。

インクルードファイルの中身が定数ならNGですが、質問で書かれているように変数なら

下記のようなことができると思います。お試しください。

意味があるコードとは思えませんが。

if (b) {

#include "a.h"

} else {

#include "b.h"

}

しかも言語の違いはリソースで対応するのが一般的な方法です。

外部DLLを作成して、LoadStringしてください。

http://www.nitoyon.com/vc/reference/gui/resource.htm

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ