ええと、C ++はインフラストラクチャをあまり提供しないため、小さなスローオフプログラムにはあまり適していません。標準ライブラリの上に独自のインフラストラクチャ(まあ、単なるセットなど)を作成することを目的としています。または、サードパーティのライブラリ、つまり選択したライブラリを使用します。
したがって、Pythonにはバッテリーが含まれていますが、C ++では、特定の提供されたバッテリーを受け入れるという強いプレッシャーはありません(バッテリーがないため)が、少なくともバッテリーを選択する必要があります。
基本的なコードについては、Pythonスニペット
CONFIRMATIONS = ("yes", "yeah", "yep", "yesh", "sure", "yeppers", "yup")
DECLINATIONS = ("no", "nope", "too bad", "nothing")
response = raw_input( "yes or no? " )
if response in CONFIRMATIONS:
pass # doSomething()
elif response in DECLINATIONS:
pass # doSomethingElse()
else:
pass #doAnotherThing()
C++では次のようになります。
typedef Set< wstring > Strings;
Strings const confirmations = temp( Strings() )
<< L"yes" << L"yeah" << L"yep" << L"yesh" << L"sure" << L"yeppers" << L"yup";
Strings const declinations = temp( Strings() )
<< L"no" << L"nope" << L"too bad" << L"nothing";
wstring const response = lineFromUser( L"yes or no? " );
if( isIn( confirmations, response ) )
{
// doSomething()
}
else if( isIn( declinations, response ) )
{
// doSomethingElse()
}
else
{
// doAnotherThing()
}
Set
ただし、クラスのように、定義されているインフラストラクチャに依存します。
template< class TpElem >
class Set
{
public:
typedef TpElem Elem;
private:
set<Elem> elems_;
public:
Set& add( Elem const& e )
{
elems_.insert( e );
return *this;
}
friend Set& operator<<( Set& s, Elem const& e )
{
return s.add( e );
}
bool contains( Elem const& e ) const
{
return (elems_.find( e ) != elems_.end());
}
};
template< class Elem >
bool isIn( Set< Elem > const& s, Elem const& e )
{
return s.contains( e );
}
operator<<
2012年の時点で、VisualC++はC++11中括弧リストの初期化をサポートしていないためです。
これset
はstd::set
標準ライブラリからのものです。
そして、うーん、temp
物事:
template< class T >
T& temp( T&& o ) { return o; }
そして、より多くのインフラストラクチャ、lineFromUser
機能:
wstring lineFromUser( wstring const& prompt )
{
wcout << prompt;
wstring result;
getline( wcin, result )
|| throwX( "lineFromUser: std::getline failed" );
return result;
}
これは、関数に依存していthrowX
ます:
bool throwX( string const& s ) { throw runtime_error( s ); }
cppMain
ただし、最初に示したC ++コードを関数に入れて、たとえばそれを呼び出し、関数から呼び出す必要があることを除いて、これですべてですmain
(定義するインフラストラクチャがさらに増えます!)。
int main()
{
try
{
cppMain();
return EXIT_SUCCESS;
}
catch( exception const& x )
{
wcerr << "!" << x.what() << endl;
}
return EXIT_FAILURE;
}
したがって、C ++で中途半端なことを適切に行うには、かなりのオーバーヘッドがあります。
C ++は主に大きなプログラム用であり、Python(私がよく使用する)は小さなプログラム用です。
そして、はい、私は一部の学生がその声明に反応するかもしれないし、反応するであろうことを知っています、彼らはそれが小さなプログラムには良くないと言うのはC ++のスラーだと感じます(ねえ、私はいつもそれらを作ります!)そして/またはそれは大規模なシステムには良くないと言うためにPythonを嘲笑します(YouTubeのことを聞いたことがありませんか、無能な人は馬鹿げていますか?)、しかし、それはそうです。ネジを締める必要のあるハンマーを使用する方が便利な場合もあるので、たとえば、C++を使用して小さな作業を行う場合もあります。しかし、一般的には、手元のマシンにPythonをインストールするのは面倒なので、一般に、タスクXを実行するには、Xのような作業用に設計されたツールを使用するのが最善です。