Recommended
PDF
PDF
競技プログラミングにおけるコードの書き方とその利便性
ODP
PPTX
PPTX
PPTX
PPTX
PDF
PPTX
PDF
PDF
error handling using expected
PDF
Boost.勉強会#19東京 Effective Modern C++とC++ Core Guidelines
PDF
Replace Output Iterator and Extend Range JP
PDF
PDF
PDF
PPTX
PPTX
T69 c++cli ネイティブライブラリラッピング入門
PDF
PPTX
PDF
PPT
PDF
PPTX
PPTX
MISRA-C2012とISO/IEC 9899:2011 at OSCNagoya2013
PDF
PDF
Define and expansion of cpp macro
PPTX
Effective modern C++ 勉強会 #3 Item 12
PDF
PDF
Boost study meeting opening 4
More Related Content
PDF
PDF
競技プログラミングにおけるコードの書き方とその利便性
ODP
PPTX
PPTX
PPTX
PPTX
PDF
What's hot
PPTX
PDF
PDF
error handling using expected
PDF
Boost.勉強会#19東京 Effective Modern C++とC++ Core Guidelines
PDF
Replace Output Iterator and Extend Range JP
PDF
PDF
PDF
PPTX
PPTX
T69 c++cli ネイティブライブラリラッピング入門
PDF
PPTX
PDF
PPT
PDF
PPTX
PPTX
MISRA-C2012とISO/IEC 9899:2011 at OSCNagoya2013
PDF
PDF
Define and expansion of cpp macro
PPTX
Effective modern C++ 勉強会 #3 Item 12
Viewers also liked
PDF
PDF
Boost study meeting opening 4
PDF
PDF
The Earth is not flat; but it's not round either (Geography on Boost.Geometry)
PDF
boost::shared_ptr tutorial
DOCX
PDF
PDF
PPTX
PDF
3DCAD@VDI活用とCADデータ管理のロードマップ
PDF
PDF
PDF
PPTX
PPTX
PPTX
PDF
ゲームアプリの数学@GREE GameDevelopers' Meetup
PPTX
BoostAsioで可読性を求めるのは間違っているだろうか
PDF
PDF
Boost.勉強会 #15 札幌 LT「8年間の研究生活でC++書いてて大変だったことベスト3」
Similar to boost - std - C#
PDF
PPTX
PDF
PDF
PDF
PDF
PPTX
PDF
PDF
PDF
PDF
【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第5回 ‟配列と構造体„
PPTX
PPTX
PDF
PPTX
最新C++事情 C++14-C++20 (2018年10月)
PDF
PDF
PDF
PPTX
PPT
More from Tatsuya Ishikawa
PPTX
burikaigi2025.pptx Burikaigi2025でつかった資料です。
PPTX
DotNetConf2024の資料 BlazorとLowCodeと生成AIの話です
PDF
2024/07/04 Blazor+ローコードで実現する.NET資産のモダナイズ
PPTX
PPTX
【オンライン】.NET 6 移行祭り! C# Tokyo イベント
PPTX
PPTX
PPTX
Test automation strategy for .net core 3 transition
PDF
PPTX
Infragistics Web Day 2017 - 継続的な開発を支える テスト自動化技術
PPTX
PPTX
メタな感じのプログラミング(プロ生 + わんくま 071118)
PPTX
PPTX
PPTX
価値あるシステムテスト自動化の実現By friendly
PPTX
PPTX
Bindingからframework elementを見つける
PPTX
【SQiP2014】システム操作インターフェイス最適化によるテスト自動化ROI向上
PPTX
Friendlyで始めるwindowsアプリシステムテスト自動化+内部使用技術解説
PPTX
Windowsアプリテスト自動化 [Friendly+delphi]
boost - std - C# 1. boost – std - C#
株式会社Codeer
石川達也
http://www.codeer.co.jp/
2. 3. 1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
3
プログラム経験はこんな感じです。
C++
C
Java
C#
入社
会社辞める→フリー
Codeer設立
4. 4
1999 Boost - 1999/12/30(Early releasesが14日にあった)
2000
2001
2002 Let’s Boostスタート
2003
2004 Boost本
2005
2006
2007
2008
2009
2010
2011 C++11
2012
2013
2014
5. 5
1999 Boost - 1999/12/30(Early releasesが14日にあった)
2000 C#発表(6月)
2001
2002 Let’s Boostスタート
2003 C#1.1
2004 Boost本
2005 C#2.0(11月)
2006
2007
2008
2009
2010
2011 C++11
2012
2013
2014
6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 22
foreach
BOOST_FOREACH
std::vector<A> vec;
BOOST_FOREACH(A e, vec) {}
//参照もOK
BOOST_FOREACH(A& e, vec) {}
BOOST_FOREACH(const A& e, vec) {}
23. 23
foreach
BOOST_FOREACH
//これはコンパイル通らない
std::map<int, int> m;
BOOST_FOREACH(
std::map<int, int>::value_type e, m)
{
}
マクロだから,に弱い
24. 25. 25
foreach
C++11では
std::vector<A> vec;
for(auto e : vec) {}
//参照もOK
for(const auto e : vec) {}
for(const auto& e : vec) {}
11ではautoって書く方がオシャレ
26. 27. 28. 28
foreach
MS方言for each
for each(A a in vec){}
//const 参照もOK
for each(const A& a in vec){}
//参照はコンパイル通らない・・・(´・ω・`)
for each(A& a in vec){}
29. 29
役に立つMS方言講座
interface
//classの代わりにinterfaceって書ける!
interface IA
{
public:
virtual ~IA(){}
virtual void Func() = 0;
};
interfaceであることを強調・・・
30. 30
役に立つMS方言講座
propertyが使える
class A
{
int b;
public:
int GetB() const { return b; }
void SetB(int val) { b = val; }
public:
__declspec(property(
get = GetB, put = SetB)) int B;
};
31. 31
役に立つMS方言講座
propertyが使える
#define PROPERTY( _t, _m )
private: _t m_##_m ;
public:
__declspec(property(get=get##_m, put=set##_m)) _t _m ;
_t get##_m() { return m_##_m; }
void set##_m( _t value ) { m_##_m = value; };
マクロを作ると書きやすい
↓のサイトに書いてたよ
http://www.moonmile.net/blog/archives/3557
32. 33. 34. 35. 35
役に立つMS方言講座
event
struct B {
A* pA;
void Func(){}
B(A& a) : pA(&a) {
__hook(&A::Func, pA, &B::Func, this);
}
~B() {
__unhook(&A::Func, pA, &B::Func, this);
}
};
36. 37. 38. 38
object型
boost::any
//型情報も取れちゃう
if (a.type() == typeid(long)) {
}
else if (a.type() == typeid(int)) {
}
39. 39
object型
boost::any
//キャストで中身取得
l = boost::any_cast<long>(a);
//失敗したら例外
try {
i = boost::any_cast<int>(a);
}
catch (boost::bad_any_cast e){}
40. 40
object型
boost::any
//shared_ptrと合わせたらもっとポイよねー
boost::any a =
std::make_shared<X>();
便利だけど、標準化はされてないよね?
41. 41
object型
boost::any
型をボンヤリさせるテクニックは
Type Erasureって言うんだって
boost::shared_ptrとか
boost::function
にも使われているらしい。
42. 43. 43
delegate
class Test {
int x = 0;
public void MyAction() { x = 10; }
public void Main() {
Action a = MyAction;
a();
}
}
そもそも何が便利? C#
単なる関数ポインタではなく
インスタンスに結びついている
44. 44
delegate
boost::bind
class Test
{
int x;
void MyAction(){ x = 10; }
public:
void Main() {
boost::function<void()> a =
boost::bind(&Test::MyAction, this);
a();
}
};
45. 45
delegate
C++11では標準の仲間入り!
class Test
{
int x;
void MyAction(){ x = 10; }
public:
void Main() {
std::function<void()> a =
std::bind(&Test::MyAction, this);
a();
}
};
46. 46
delegate
そもそも何が便利? C#
int i = 0;
Action a = ()=>
{
i++;
}
a();
ササっと書ける
ローカル変数取り込める
Assert.AreEqual(i, 1);
47. 48. 49. 49
delegate
boost::lambda
placeholder1_type
BOOST_LAMBDA_BE(operator+
BOOST_LAMBDA_BE(operator-
BOOST_LAMBDA_BE(operator*
BOOST_LAMBDA_BE(operator/
・・・・
こいつがoperator hoge
を山ほど実装しとるわけですな
50. 51. 51
delegate
int i = 0;
auto a = [&]()
{
i++;
};
a();
C++11
C++11なら言語でサポートされている
52. 52
LINQ
LINQも重要なんだけど、
それを実現するための機能の方がもっと重要
型推論だってLINQの戻り値の型書くの嫌
ラムダサラッと処理作って渡せるのがいいのよ
(ここが98のアルゴリズムの弱点)
匿名型任意に抽出したデータを返せる
拡張メソッドあたかも、そのコンテナのメソッドのように
使える
これらはLINQ以外でもヘビーに使われる
53. 54. 54
匿名型
void main() {
var a = Decl (() =>
{
return new { x = 1, y = "hoge" };
});
var ret = a();
}
//型推論を助けてやらんとあかんけど
static Func<T> Decl<T>(Func<T> x) {
return x;
}
そもそもC#では
55. 55
匿名型
[]() {
struct{
int a;
} a;
return a;
};
C++
できるかと思ったら
さすがに怒られたw
56. 56
C++で拡張メソッド
そもそもC#では
class A {
public int a{get; set;}
}
static class Aextensions {
public static void X(this A a) {
a.a = 100;
}
}
A a;
a.X();
57. 58. 59. 59
C++で拡張メソッド
a|X();
struct A { int a; };
struct XCore { //③
void operator()(A& a){ a.a = 100; }
};
//②
void operator | (A& a, XCore& b) { b(a); }
//①
XCore X() { return XCore(); }
そこまでしてやりたいんかい!
60. 60
C++で拡張メソッド
a|X();
struct A { int a; };
struct XCore { //③
void operator()(A& a){ a.a = 100; }
};
//②
void operator | (A& a, XCore& b) { b(a); }
//①
XCore X() { return XCore(); }
そこまでしてやりたいんかい!
61. 61
C++で拡張メソッド
でもおかげで、メソッドチェーンができます。
vector<int> vec;
auto ret = vec
| filtered([](const int &e) {...})
| filtered([](const int &x) {...})
| transformed([](const int &x) {...});
こう見るとパイプっぽくてカッコいい!
62. 63. 63
LINQ
C++11では?
・cpplinq
・boost.RangeのOven拡張
とかあるんだって
↓ここに書いてありました
http://d.hatena.ne.jp/wordi/20131116/p1
64.