whoaalas
发表于 2014-07-11 01:23
:mrgreen:
flymarshal
发表于 2014-07-19 23:06
template 和操作符重载是C++最具威力的特性,当然,不用也能完成任务,但要多写很多代码
changsha
发表于 2014-08-07 15:12
都out了,Swift才是大势所趋
swgshj
发表于 2014-08-14 09:24
方法全静态,全public?
Hugo801122
发表于 2014-09-01 01:09
其实用c++的很少吧,也理解不到多深吧。类用起来跟struct差不多,没发挥多少OO的特性。
polyzz
发表于 2014-09-13 14:14
C++除了STL是一个不错的工具,其他的任何一个特性都和代码的简洁没关系!
C如果有这么好的库,分分钟不做C++
yulihua49
发表于 2014-09-16 11:10
polyzz 发表于 2014-09-13 14:14 static/image/common/back.gif
C++除了STL是一个不错的工具,其他的任何一个特性都和代码的简洁没关系!
C如果有这么好的库,分分钟不做C ...
有CSTL,本坛搜一下。
btdm
发表于 2014-11-20 17:32
这也是业界的现状,很多java程序员也就是一个main到底的,其实main是用来做单元测试的。
用好C++,需要的不是C++的语法,而是设计类的能力,你需要解耦,而不是一团东西堆在一起。
lost_templar
发表于 2014-11-20 17:58
windoze 发表于 2014-05-29 16:37 static/image/common/back.gif
回复 7# hellioncu
this和虚函数没什么直接关系,随便哪个成员函数都有this可用的。
虚函数最讨厌的地方就是只有指针/引用才有多态性,一旦你的程序开始使用虚函数,接下来你就甩不掉new/delete/*_cast这些东西了,而这些东西刚好就是很多人不喜欢C++的根本原因之一。
这个可是不一定的,你完全可以用静多态,没有 new/delete 这种问题,很多库就是用 CRTP 的
lost_templar
发表于 2014-11-20 18:19
幻の上帝 发表于 2014-06-23 10:39 static/image/common/back.gif
回复 43# windoze
只要放弃C++继承跟OOD出来的继承一一对应的想法实际上问题就没那么大了。
为什么这里需要排斥继承呢。继承当mixin用不是很自然的手法么。
当然,要说C++在这里能力不足倒是对的。
成员的话得要一些不太好看的小花招。
template<class T>
class TextBoxTraits
{
public:
using Event = decltype(T:xxxx);
using EventMemberGetterType = some_getter_type; // 比如Event()。
private:
EventMemberGetterType p;
public:
template<typename T>
TextBoxTraits(EventMemberPtrType f) : p(f)
{}
Event& GetEvent()
{
//return (static_cast<T&>(*this).*p)();
// 这里按 EventMemberGetterType 具体类型看着办。
}
};
class Container : TextBoxTraits<Container >
{
public:
//...
};
只有一个事件比较浪费,多了还算能用。
不过我不用这套。为了接口清楚我宁可自己抄一遍类似的声明。就算mixin也是protected然后手动显式using。
如果怕麻烦罗嗦,用宏节约实现成本。
话说这里为什么要保存 event_handler 的一个拷贝呢?
要么直接在container 里边定义
template< typename D >
struct TextBox
{
void on_enter_pressed()
{
D& self = static_cast<D&>( *this );
self.process_enter();
}
void process_enter()
{
std::cout << "I am default enter handler";
}
};
struct my_text_box : TextBox<my_text_box>
{
void precess_enter()
{
std::cout << "ding?";
}
};
要么直接保存一个 map ,需要定制的时候直接修改就行了
std::map<event_as_key_type, handler_function_type> event_handler_associate_map;
event_hadler_associate_map = [](){ std::cout << "ding"; };
页:
1
2
3
4
5
6
7
8
9
[10]
11
12