要禁止复制或分配类,通常的做法是将复制构造函数和赋值运算符设为私有.谷歌和Qt都有宏,使这个变得简单明了.这些宏是:
谷歌:
#define DISALLOW_COPY_AND_ASSIGN(TypeName) \
TypeName(const TypeName&); \
void operator=(const TypeName&)
Run Code Online (Sandbox Code Playgroud)
Qt的:
#define Q_DISABLE_COPY(Class) \
Class(const Class &); \
Class &operator=(const Class &);
Run Code Online (Sandbox Code Playgroud)
问题:为什么两个赋值运算符的签名不同?好像Qt版本是正确的.两者之间有什么实际区别?
我有一本很大的字典,我必须多次查阅这些字典.我的键是整数,但代表标签,所以不需要添加,减去等...我最终试图评估字符串键和整数键字典之间的访问时间,这是结果.
from timeit import Timer
Dint = dict()
Dstr = dict()
for i in range(10000):
Dint[i] = i
Dstr[str(i)] = i
print 'string key in Dint',
print(Timer("'7498' in Dint", "from __main__ import Dint").timeit(100000000))
print 'int key in Dint',
print(Timer("7498 in Dint", "from __main__ import Dint").timeit(100000000))
print 'string key in Dstr',
print(Timer("'7498' in Dstr", "from __main__ import Dstr").timeit(100000000))
print 'int key in Dstr',
print(Timer("7498 in Dstr", "from __main__ import Dstr").timeit(100000000))
Run Code Online (Sandbox Code Playgroud)
每次重现的运行之间产生轻微变化:
string key in Dint 4.5552944017
int key in Dint 7.14334390267 …Run Code Online (Sandbox Code Playgroud) 愚蠢的简化代码示例没有做任何有用的事情,而是对数据成员指针的两个后续分配.第一个分配工作,第二个分配给出编译器错误.大概是因为它是一个嵌套的成员.
问题是:是否真的不可能让成员指针指向嵌套成员,或者我错过了任何花哨的语法?
struct Color {
float Red;
float Green;
float Blue; };
struct Material {
float Brightness;
Color DiffuseColor; };
int main() {
float Material::* ParamToAnimate;
ParamToAnimate = &Material::Brightness; // Ok
ParamToAnimate = &Material::DiffuseColor.Red; // Error! *whimper*
return 0; }
Run Code Online (Sandbox Code Playgroud)
ATM我通过使用字节偏移和大量演员来解决.但这很难看,我最好使用那些成员指针.
是的,我知道之前肯定会出现这个问题(几乎与任何问题一样).是的,我事先搜查过但发现没有令人满意的答案.
谢谢你的时间.
我对使用现代版本的GCC 4.4.x/4.5.x构建C++库有一些兼容性问题,其中旧版本的客户端,例如3.4.x/4.1.x. 已经提出的一个解决方案是编译目标文件并分发它们.然后,客户可以使用任何版本的GCC和相关的ABI进行链接.一些问题:
干杯,格雷姆
基本上我有以下型号:
class Event(models.Model):
start = models.DateTimeField(default=0)
Run Code Online (Sandbox Code Playgroud)
当我尝试使用datetime.datetime.strptime创建一个对象时,我得到了
Event.objects.create(start=datetime.datetime.strptime("02/03/2014 12:00 UTC",
"%d/%m/%Y %H:%M %Z"))
/usr/local/lib/python2.7/dist-packages/django/db/models/fields/__init__.py:903:
RuntimeWarning: DateTimeField Event.start received a naive datetime (2014-03-02
12:00:00) while time zone support is active.
Run Code Online (Sandbox Code Playgroud)
我已经经历了许多与此相似的帖子,但我无法弄清楚为什么它会给出错误,尽管我正在提出这个UTC (%Z)论点.
提前致谢.
public class aman {
void m(double a , int b, int c) {
System.out.println("second");
}
void m(float a , int b, double c) {
System.out.println("first");
}
public static void main(String[] args) {
aman obj = new aman();
obj.m(23, 12, 1);
}
}
Run Code Online (Sandbox Code Playgroud)
这里,方法m()已经重载但我不理解为什么调用是不明确的,因为在第一种方法中只需要进行1次转换,而在第二种方法中,需要进行两次转换.所以,绝对应该调用第一种方法.请说明为什么没有发生这种情况或者我错过了一些规则.
我有一个关于symfony2懒惰服务的问题.什么时候应该使用懒惰的服务,何时应该避免使用它们?如果我们使用懒惰服务,是否有任何开销?
我目前正在使用QLabel来执行此操作,但这似乎很慢:
void Widget::sl_updateLiveStreamLabel(spImageHolder_t _imageHolderShPtr) //slot
{
QImage * imgPtr = _imageHolderShPtr->getImagePtr();
m_liveStreamLabel.setPixmap( QPixmap::fromImage(*imgPtr).scaled(this->size(), Qt::KeepAspectRatio, Qt::FastTransformation) );
m_liveStreamLabel.adjustSize();
}
Run Code Online (Sandbox Code Playgroud)
在这里,我为到达的每个新图像生成一个新的QPixmap对象。由于QPixmap操作仅限于GUI线程,因此这也使GUI感觉响应较差。
我已经看到了关于此的一些讨论,其中大多数建议使用QGraphicsView或QGLWidget,但是我无法找到一个快速的示例来说明如何正确使用它们,这正是我所寻找的。
我将不胜感激。
我正通过c#向私人队列发送消息:
MessageQueue msgQ = new MessageQueue(@".\private$\aaa");
msgQ.Formatter = new XmlMessageFormatter(new[] { typeof (String) });
msgQ.Send(msg);
Run Code Online (Sandbox Code Playgroud)
它确实有效,我确实在队列中看到了这条消息.
但是,有没有办法获得ACK消息是否成功进入队列?
NB
BeginPeek并且PeekCompleted是当队列中的消息可用或指定的时间间隔到期时引发的事件.它没有帮助我,因为我需要知道我发送的消息是否由msmq获取.BeginPeek如果其他人向队列输入消息,也会引发此异常.我想要的最后一件事就是检查通过BeginPeek- 这条消息来自谁.
我该怎么做 ?
NB2
或者也许我不必担心,因为msgQ.Send(msg);如果没有插入消息会引发异常......?
如何制作非原始类型A和B两种可区分的类型,以便为函数接口添加类型安全f?
constexpr std::size_t type_size{ 8U };
using A = std::array<char, type_size>;
using B = std::array<char, type_size>;
constexpr auto f(A const a, B const b)
{
// Not shown logic here.
}
Run Code Online (Sandbox Code Playgroud)