iequals
BOOST ライブラリの大文字と小文字を区別しない文字列比較関数を使用するだけです。
使っ#include <boost/algorithm/string.hpp>
て輸入しています。
iequals
関数を単独でインポートする方法はありますか?
私が気にする理由は (私は本当に興味があるだけです.)、コンパイルされた DLL は、そうしないと約 230kB であり、そうすると約 1.1MB#include
になるからです。この特定のケースでは、ファイルの大きさに大きな違いはありませんが、インポートされて使用されないものがたくさんあるようです。ライブラリが数 GB で、関数の 1 つだけが必要な場合はどうなりますか? それが問題になると思います。
私は cpp 関連のことに関しては確かに世間知らずですが、おそらく 90% が使用されていない場合に 750kB のコードを含めるのはあまり効率的ではないと感じています。iequals
関数がその 750kB をすべて使用している可能性がありますが、私にはわかりません。
繰り返しになりますが、iequals
関数に同じライブラリが多数含まれている場合でも、ファイルは同じくらい大きくなります。
考え?
アドバイスをよろしくお願いします。
編集:
回答ありがとうございます。私はそれらを理解するために最善を尽くしています。
私は非常に遅く最適化されていない一連の VBA マクロを C++ DLL に書き直す化学エンジニアです。これまでのところ、結果は素晴らしく、すべてが正しく機能しています。2 つの文字列間で 1 つのタイプの比較のみを行う必要がある場合は、余分なファイル サイズが必要になるとは思いません。
私が行う必要がある比較の例は次のとおりです。
if (SomeBSTR == "SomeTextHere") {
// do stuff
}
またはより正確には:
if (Gas == "Methane" or
Gas == "CH4" or
Gas == "C1") return 1;
if (Gas == "Ethane" or
Gas == "C2H6" or
Gas == "C2") return 2;
これが私がしなければならない唯一のタイプの比較である場合、次よりも簡単な方法でそれを行うことができますか?
int wStrCmp(const BSTR Str1, const wstring Str2) {
wstring wStr1(Str1, SysStringLen(Str1));
return boost::iequals(Str1, Str2);
}
これは次の方法で呼び出されます。
if (wStrCmp(Gas, L"Methane") or
wStrCmp(Gas, L"CH4") or
wStrCmp(Gas, L"C1")) return 1;
これらの最後の 2 つのブロックは、実際には私のコードから貼り付けられています。
ありがとう、みんな。