小编bas*_*ibe的帖子

我的程序大部分时间都花在objc_msgSend上.这是否意味着Objective-C表现不佳?

我编写了一个具有许多自定义视图的应用程序,通常会绘制很多行和位图.由于性能对应用程序来说有点关键,我花了很多时间来优化绘图性能.

现在,活动监视器告诉我,我的应用程序通常使用大约12%的CPU和仪器(分析器)表示花费了大量10%的CPU objc_msgSend(主要用于绘制相关的系统调用).

一方面,我很高兴这一点,因为这意味着我的绘图速度和它的速度一样快,我的优化也取得了巨大的成功.另一方面,它似乎意味着仍然使用我的CPU的唯一事情是messages(objc_msgSend)的Objective-C开销.因此,如果我在Carbon中编写应用程序,那么它的性能将会大大改善.

现在我很想得出结论,Objective-C是一种表现不佳的语言,尽管Cocoa似乎效率非常高,因为它显然可以比Objective-C发送消息更快地绘制.

那么,Objective-C真的是一种表现不佳的语言吗?你觉得怎么样?

performance cocoa drawing objective-c

1
推荐指数
1
解决办法
1357
查看次数

无法使用Visual C++链接到带有模板的类

我在C++中编写了一个很好的小数组类,用于void*保存其条目.

现在,我想让它使用模板.这是我的新标题:

template <typename T>
class SimpleArray
{
public:
    SimpleArray();
    ~SimpleArray();

    void SetEntry(int idx, T setEntry);
    T GetEntry(int idx);
    // and so on
protected:
    T *pData
    short iNumEntries;
}
Run Code Online (Sandbox Code Playgroud)

这些函数在不同的文件中实现,如下所示:

#include "SimpleArray.h"

template <typename T>
void SimpleArray<T>::SetEntry(int idx, T setEntry)
{
    // code here
}

template <typename T>
T SimpleArray<T>::GetEntry(int idx)
{
    // more code here
}
Run Code Online (Sandbox Code Playgroud)

这编译很好,但是当我想在其他一些代码中使用它时

SimpleArray<SomeType*> cache;
cache.SetEntry(0, someThing);
Run Code Online (Sandbox Code Playgroud)

我收到一个链接器错误,声明有一个 unresolved external symbol

2> Thing.obj:错误LNK2019:未解析的外部符号"public:bool __thiscall SimpleArray :: SetEntry(int,class someThing*)"(?SetEntry @?$ SimpleArray @ PAUsHandle @@@@ …

c++ templates linker-errors

1
推荐指数
1
解决办法
296
查看次数

Qt没有找到QStackedWidgets的插槽setCurrentWidget

我在Qt中编写了一个向导式应用程序,它使用QStackedWidget来组织向导的各个页面.现在我想在页面之间切换,这应该是可以使用的功能setCurrentWidget(...):

我有一个简单的主类来实例化QWidget audioconfig.然后,它将此QWidget添加到QStackedWidget pageStack使用pageStack.addWidget(&audioconfig);.

后来,我想将来自不同QWidget的特定信号连接hubsetCurrentWidget(...)QStackedWidget,以便切换页面.但是,我的编译器评论说

0Object :: connect:/Users/paperflyer/Development/App/main.cpp中没有这样的插槽QStackedWidget :: setCurrentWidget(audioconfig):41`

我有两件事没有到达:

  • 显然有这样的功能.您可以在QStackedWidget的类定义中查找它.这里发生了什么?
  • 为什么编译器的第一个字符输出为'0',而我的源代码清楚正确地显示为'Q'?

这是整个代码:

int main(int argc, char *argv[])
{
    QApplication app(argc,argv);
    QStackedWidget pageStack;
    CHub hub; // inherits from CWidget
    CAudioConfig audioconfig; // ditto
    pageStack.addWidget(&hub);
    pageStack.addWidget(&audioconfig);

    // connect() is a custom signal of hub
    QObject::connect(&hub, SIGNAL(configure()), &pageStack, SLOT(setCurrentWidget(&audioconfig)));

    pageStack.setGeometry(100,100,700,500);

    pageStack.show();
    return app.exec();
}
Run Code Online (Sandbox Code Playgroud)

一如既往,非常感谢你的帮助!

c++ user-interface qt

0
推荐指数
1
解决办法
1308
查看次数

int(floatvar)和(int)floatvar之间有区别吗?

可能重复:
C++:函数(myVar)和(函数)myVar有什么区别?

我已经看到并使用了这些类型转换的两种变体:

int(floatvar)

(int)floatvar
Run Code Online (Sandbox Code Playgroud)

这两者有什么区别吗?关于何时使用哪个有什么偏好?

c++ language-features typecast-operator

0
推荐指数
1
解决办法
155
查看次数