unary_function は C++11 から非推奨だったのね。
functional – cpprefjp C++日本語リファレンス
std::cout を覚えただけで C++ を簡単みたく書く初心者ブログが多いよね。
筆者の Tips ページはそいつらが見たら絶望するように STL を使っていたり。
なのでワケワカメの代表 unary_function が使えないのは困ったなぁ。
と思ったけどコメントアウトしただけで動くじゃん。
それと auto で便利になったとかも見かける。
いや、class で this を戻すのに auto 指定できるレベルでないとそれほど。
…できるジャン!
// stl.cc
#include <iostream>
#include <vector>
#include <algorithm>
/**
* Fedora 33
* g++ stl.cc
*
* macOS Big Sur
* clang++ -std=c++14 stl.cc
*/
/*
* みんな大好き C++ のテンプレート
* C++11 より unary_function は非推奨
* なんだけど、継承する必要が無くなっただけだったり
*/
template <class T>
struct outputfunc { // : public std::unary_function<T, void> {
void operator()(T obj) {
std::cout << obj << " ♪♪♪ ";
}
};
class App {
public:
App() {
std::vector<std::string> vec = {"SUZUKIの", "バイクは", "カッコイイ"};
// 関数オブジェクトにしたけど今は範囲ベース for のほうがいい
std::for_each(vec.begin(), vec.end(), outputfunc<std::string>());
}
~App() {
std::cout << std::endl << "今日も元気でね!" << std::endl;
}
static auto init() {
// auto で this を戻せる
return new App();
}
};
int
main(int argc, char* argv[]) {
// イヂワルな初期化
auto app = App::init();
delete app;
return 0;
}
macOS ではオプションが必要なのね、c++17 指定でもいい。
for も Python と同じようにできるし、使わない間に随分進化していた。
後は :: と -> が全部ドットになれば、って今更無理だろうな。
たまにしか C++ を触らないとどうしてもソコがね。
