我可以通过UIAppearance代理设置哪些属性?Apple的UIKit文档没有列出它们.有这些属性的列表吗?
我有一个类,它适应std :: vector来模拟特定于域的对象的容器.我想向用户公开大多数std :: vector API,以便他/她可以在容器上使用熟悉的方法(大小,清晰,等等......)和标准算法.在我的设计中,这似乎是一种反复出现的模式:
class MyContainer : public std::vector<MyObject>
{
public:
// Redeclare all container traits: value_type, iterator, etc...
// Domain-specific constructors
// (more useful to the user than std::vector ones...)
// Add a few domain-specific helper methods...
// Perhaps modify or hide a few methods (domain-related)
};
Run Code Online (Sandbox Code Playgroud)
我知道在重用类实现时更喜欢使用组合继承的做法 - 但是必须有限制!如果我将所有内容委托给std :: vector,那么(按我的计数)将有32个转发函数!
所以我的问题是......在这种情况下继承实施真的很糟糕吗?有什么风险?有没有更安全的方式我可以在没有这么多打字的情况下实现这一点?我是使用实现继承的异教徒吗?:)
编辑:
如何明确用户不应该通过std :: vector <>指针使用MyContainer:
// non_api_header_file.h
namespace detail
{
typedef std::vector<MyObject> MyObjectBase;
}
// api_header_file.h
class MyContainer : public detail::MyObjectBase
{
// ... …Run Code Online (Sandbox Code Playgroud) 我需要在NSArray中存储对象的弱引用,以防止保留周期.我不确定使用正确的语法.这是正确的方法吗?
Foo* foo1 = [[Foo alloc] init];
Foo* foo2 = [[Foo alloc] init];
__unsafe_unretained Foo* weakFoo1 = foo1;
__unsafe_unretained Foo* weakFoo2 = foo2;
NSArray* someArray = [NSArray arrayWithObjects:weakFoo1, weakFoo2, nil];
Run Code Online (Sandbox Code Playgroud)
请注意,我需要支持iOS 4.x,__unsafe_unretained而不是__weak.
编辑(2015-02-18):
对于那些想要使用真__weak指针(不是__unsafe_unretained)的人,请查看这个问题:在ARC下归零弱引用
使用C++ 11中显式删除的成员函数,是否仍然值得从不可复制的基类继承?
我在谈论私有继承基类的技巧,该基类具有私有或删除的复制构造函数和复制赋值(例如boost::noncopyable).
这个问题提出的优势是否仍适用于C++ 11?
我不明白为什么有些人声称在C++ 11中使类不可复制更容易.
在C++ 03中:
private:
MyClass(const MyClass&) {}
MyClass& operator=(const MyClass&) {}
Run Code Online (Sandbox Code Playgroud)
在C++ 11中:
MyClass(const MyClass&) = delete;
MyClass& operator=(const MyClass&) = delete;
Run Code Online (Sandbox Code Playgroud)
编辑:
正如许多人所指出的那样,为私有拷贝构造函数和拷贝赋值运算符提供空体(即{})是错误的,因为这将允许类本身调用那些运算符而没有任何错误.我首先开始没有添加{},但遇到了一些链接器问题,这些问题让我添加{}有些愚蠢的原因(我不记得这些情况).我知道更清楚.:-)
我在typedef的boost :: shared_ptr模板的命名约定之间翻转.例如:
typedef boost::shared_ptr<Foo> FooPtr;
Run Code Online (Sandbox Code Playgroud)
在制定一项公约之前,我想看看其他人使用什么.你的约定是什么?
编辑:
对于那些在Foo中嵌入typedef的人来说,Foo现在"意识到"它将如何被传递并不会让你烦恼吗?它似乎打破了封装.这个怎么样:
class Foo
{
public:
typedef std::vector<Foo> Vector
};
Run Code Online (Sandbox Code Playgroud)
你现在不会这样做,对吗?:-)
当你说"优化"时,人们倾向于认为"速度".但是速度并不是那么关键的嵌入式系统呢,但内存是一个主要的限制因素呢?什么是一些指南,技术和技巧可用于削减ROM和RAM中的额外千字节?一个"配置文件"代码如何查看内存膨胀的位置?
PS One可能会争辩说,在嵌入式系统中"过早地"优化空间并不是那么邪恶,因为你给自己留下了更多的数据存储空间和功能蠕变.它还允许您降低硬件生产成本,因为您的代码可以在较小的ROM/RAM上运行.
PPS也欢迎参考文章和书籍!
我正在使用一个范围枚举来枚举我正在实现的某个状态机中的状态.例如,让我们说:
enum class CatState
{
sleeping,
napping,
resting
};
Run Code Online (Sandbox Code Playgroud)
在我定义状态转换表的cpp文件中,我想使用等价的东西,using namespace X这样我就不需要为我的所有州名添加前缀CatState::.换句话说,我想用sleeping而不是CatState::sleeping.我的转换表有很多列,因此避免使用CatState::前缀会使事情变得更紧凑和可读.
那么,有没有办法避免一直打字CatState::?
是的,是的,我已经意识到了陷阱using namespace.如果有强类型枚举的等价物,我保证只在我的cpp实现文件中的有限范围内使用它,而不是邪恶.
我想为其中一个成员函数选择一个参数.如果没有提供参数,它将使用成员变量.
但是,当我尝试编译它时,它显示" 错误:无效使用非静态数据成员'Object :: initPos' "
只是为了隔离问题,我尝试默认一个int类型,它编译得很好.我想知道我的代码有什么问题,以及如何使用成员函数作为默认值.
谢谢您的帮助!
Object.h
class Object
{
public:
...
void MoveTo(double speed, Point position);
protected:
Point initPos;
Point currPos;
};
Run Code Online (Sandbox Code Playgroud)
Object.c
void Object::MoveTo(double speed, Point position = initPos)
{
currPos = postion;
}
Run Code Online (Sandbox Code Playgroud)
Point.h
class Point
{
...
private:
double x;
double y;
double z;
};
Run Code Online (Sandbox Code Playgroud) 考虑以下:
struct Point {double x; double y;};
double complexComputation(const& Point p1, const Point& p2)
{
// p1 and p2 used frequently in computations
}
Run Code Online (Sandbox Code Playgroud)
编译器是否将pass-by-reference优化为pass-by-copy以防止频繁解除引用?换句话说转换complexComputation成这个:
double complexComputation(const& Point p1, const Point& p2)
{
double x1 = p1.x; double x2 = p2.x;
double y1 = p1.y; double y2 = p2.y;
// x1, x2, y1, y2 stored in registers and used frequently in computations
}
Run Code Online (Sandbox Code Playgroud)
由于Point是一个POD,通过在调用者的背后制作副本可以没有副作用,对吗?
如果是这种情况,那么我总是可以通过const引用传递POD对象,无论多小,都不必担心最佳传递语义.对?
编辑:我特别感兴趣的是GCC编译器.我想我可能要编写一些测试代码并查看ASM.
在线参考文献对目的有相当简短和模糊的描述std::iostream::sentry.我应该什么时候关注这个小动物呢?如果它只是用于内部使用,为什么要公开?
c++ ×8
c++11 ×2
ios5 ×2
optimization ×2
arguments ×1
boost ×1
default ×1
embedded ×1
enums ×1
ios ×1
ios4 ×1
ios6 ×1
iostream ×1
iphone ×1
noncopyable ×1
object ×1
objective-c ×1
shared-ptr ×1
stl ×1
uikit ×1