标签: objective-c++

Qt 中的 Mac OS X 链接器错误;CoreGraphics 和 CGWindowListCreate

这是我的 .mm 文件

#include "windowmanagerutils.h"

#ifdef Q_OS_MAC
#import </System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGWindow.h>

QRect WindowManagerUtils::getWindowRect(WId windowId)
{
    CFArrayRef windows = CGWindowListCreate(kCGWindowListOptionOnScreenOnly, kCGNullWindowID);
    return QRect();
}

QRect WindowManagerUtils::getClientRect(WId windowId)
{
    return QRect();
}

QString WindowManagerUtils::getWindowText(WId windowId)
{
    return QString();
}

WId WindowManagerUtils::rootWindow()
{
    QApplication::desktop()->winId();
}

WId WindowManagerUtils::windowFromPoint(const QPoint &p, WId parent, bool(*filterFunction)(WId))
{
    return NULL;
}

void WindowManagerUtils::setTopMostCarbon(const QWidget *const window, bool topMost)
{
    if (!window)
    {
        return;
    }

    // Find a Cocoa equivalent for this Carbon function
    // [DllImport("/System/Library/Frameworks/Carbon.framework/Versions/Current/Carbon")]
    // OSStatus ret = HIViewSetZOrder(this->winId(), …
Run Code Online (Sandbox Code Playgroud)

c++ macos qt objective-c objective-c++

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

Objective-C++预编译头文件

我正在使用一个C++库(它恰好在iPad应用程序中,但我不确定它应该有什么区别)并且真的希望预编译头以加速构建,但xCode似乎通过C编译器而不是C++编译器运行预编译的头文件.

有没有办法让它使用正确的编译器?我已经将所有源文件从.m更改为.mm.

c++ macos xcode objective-c objective-c++

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

(目标 - )C++模板专业化上的重复符号

好吧,自昨天以来,我一直在努力解决这个奇怪的错误,所以我想是时候向社区提问了......

我目前正在使用Objective-C++,我在头文件中有一个纯粹的C++类声明,如下所示:

#ifndef __MATRIX_H__
#define __MATRIX_H__

#define USE_NEON_UPSAMPLING2X true
#define USE_NEON_THRESHOLD true

typedef float OCRfloat;

template<class T = OCRfloat>
class Matrix {

public:
    ...

    Matrix threshold(T thresholdValue) const;

    ...

    Matrix upsample2x() const;

    ...
};

#ifdef TARGET_OS_IPHONE

#if USE_NEON_UPSAMPLING2X
template<> Matrix<float> Matrix<float>::upsample2x() const;
#endif

#if USE_NEON_THRESHOLD
template<> Matrix<float> Matrix<float>::threshold(float thresholdValue) const;
#endif

#endif

#include "Matrix.cpp"

#endif
Run Code Online (Sandbox Code Playgroud)

它是模板类,具有基本矩阵运算,但是,我希望通过T = float上的模板特化来优化一些瓶颈.我有包含的Matrix.cpp文件,如下所示:

#include <iostream>
#include <cmath>

#if defined TARGET_OS_IPHONE
#include <Accelerate/Accelerate.h>
#endif

...

template<class T> Matrix<T> Matrix<T>::threshold(T thresholdValue) const {
   ... // …
Run Code Online (Sandbox Code Playgroud)

c++ xcode templates linker-errors objective-c++

4
推荐指数
2
解决办法
2440
查看次数

C++ 对象作为 Objective-C++ 属性

我想在我的 Objective-C 类中声明一个 C++ 属性。

我应该将它设置为什么样的属性?似乎strongorretain会导致一个错误,说它不是一个对象。

我怎样才能正确管理它的内存?

c++ objective-c++

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

如何 stop() 主线程 NSApp run() 事件循环?(嵌入在 C++ 中)

这是一个最小的可重现示例,如果太长而无法阅读,请转到包含问题的下一部分,然后根据需要探索代码。

最小的例子:

假设一个简单的 C++ 命令行:

主程序

#include <iostream>
#include "Wrapper.h"
int main()
{
    Wrapper wrapper;
    wrapper.run();
    std::cout << "Exiting" << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

Objective-C 包装器头文件:Wrapper.h

struct OCWrapper;
class Wrapper
{
public:
    Wrapper() noexcept;
    virtual ~Wrapper() noexcept;
    void run();
private:
    OCWrapper* impl=nullptr;
};
Run Code Online (Sandbox Code Playgroud)

及其实现:Wrapper.mm

#import "Wrapper.h"
#import "MyOCApp.h"

struct OCWrapper
{
    MyOCApp* wrapped=nullptr;
};

Wrapper::Wrapper() noexcept: impl(new OCWrapper)
{
    impl->wrapped = [[ MyOCApp alloc] init];
}

Wrapper::~Wrapper() noexcept
{
    [impl->wrapped release];
    delete impl;
}

void Wrapper::run()
{
    [impl->wrapped run];
}
Run Code Online (Sandbox Code Playgroud)

最后是 Objective-C …

objective-c++ nsapplication

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

C++多重继承和Objective-C.这是GCC中的错误吗?

我昨天遇到了以下奇怪的行为.这对我来说似乎是一个编译器错误,还是有一些我错过的东西?我使用Objective-C到C++适配器类将Facebook Connect for iPhone的Objective-C类包装起来,这样就可以更方便地使用我们自己的OpenGL/C++代码.

以下代码显示了该问题.在下面的第一个变体中,编译器编译但是弄乱了vtable,因此调用了错误的方法.在第二个变体中,我们得到一个编译器错误,表明gcc很混乱.

评论试图更详细地解释这种情况.

#include <iostream>
#import <Foundation/Foundation.h>

// An abstract C++ interface
class Foo_cpp {
public:
    virtual void foo() = 0;
};

// Another abstract C++ interface
class Bar_cpp {
public:
    virtual void bar() = 0;
};


// An Objective-C to C++ adaptor. 
// It takes a C++ interface Foo. When it's do_foo method is called it
// delegates call to Foo::foo.
@interface Foo_objc : NSObject {
    Foo_cpp* foo_cpp_;
}
@end

@implementation Foo_objc

- (id)init:(Foo_cpp*)foo {
    self …
Run Code Online (Sandbox Code Playgroud)

c++ iphone macos objective-c++

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

在Objective-C中的字符串比较与类比较

我正在编写一个Objective-C游戏,我正处于我应该开始在游戏循环中优化我的一些代码的阶段.
我使用了大量的类比较方法,

if([obj isMemberOfClass:[SomeClass class]])


我听说这种检查是相当昂贵的,因为我只选择有1个阵列填充了多个类,我需要某种类的检查.
我想也许在NSObject子类化NSObject中添加一个属性来包含一个字符串属性,在初始化过程中我将使该等特定子类的类名等于.然后干脆做一个

if([obj.klass isEqualTo:@"SomeClass"])

这会有益吗?
我试图尽可能多地保持游戏循环中的动态编码.

谢谢!

iphone objective-c objective-c++ cocos2d-iphone game-loop

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

在C++下创建一个NSWindow

我做了一个简单的实验,我在Xcode中编写了以下代码:

int main(int argc, char** argv)
{
    NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];
    NSApplication* app = [[NSApplication alloc] init];
    NSWindow* window = [[NSWindow alloc] 
        initWithContentRect: NSMakeRect(0, 0, 640, 480)
        styleMask: NSTitledWindowMask | NSMiniaturizableWindowMask
        backing: NSBackingStoreBuffered
        defer: NO];
    [window setTitle: @"New Window"];
    [window center];
    [window makeKeyAndOrderFront:nil];
    [app run];
    [pool release];
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

它按预期运行,一个新的空窗口,但如果我使用命令行在终端下编译它:

$ g++ test.mm -framework Cocoa
$ ./a.out
Run Code Online (Sandbox Code Playgroud)

没有窗口,它会在[app run]轻而易举.

我做错了吗?为什么Xcode和命令行之间有不同的行为?有人能告诉我如何在命令行中实现相同的行为吗?

提前致谢.

cocoa objective-c++

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

opencv mix with Objective C for OS X app development?

我想使用OS X默认GUI(如NSImageView)来显示OS X应用程序(不是iOS)的OpenCV图像,所以我需要使用Objective C和C++,这对于Apple LLVM编译器来说并不是什么大问题.但是当谈到OpenCV时,即使只是将opencv2/opencv.hpp导入到'.mm'文件中也会导致构建崩溃.

我收到错误:"预期会员名称或';' 声明说明符后"在OpenCV utility.hpp行'中bool check()const;'.

我搜索了这个,我在这里有一个类似的问题(混合Objective-C和C++和OpenCV).这个问题是在Cocoa和OpenCV中定义的一些宏.答案是在'.pch'文件中的Cocoa头之前导入OpenCV头.

默认情况下,iOS模板具有".pch"文件,但OS X模板不具有".pch"文件.所以我添加一个'.pch'没有运气,它也不会编译.

所以我的问题是如何才能像iOS解决方案那样做同样的事情?如何使用OpenCV编译OS X?

macos opencv objective-c++

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

在objective-C++(.mm文件)中调用swift

可以在Objective-C++(.mm)文件中调用Swift代码吗?有没有简单的解决方法,如果没有?

我有一个Xcode项目,它是Swift,Objective-C和C++的混合体.我没有问题从Objective-C到Swift用-Bridging-Header.h或从Swift到Objective-C用-Swift.h.

但我有一个.mm文件,它是Objective-C++.当我尝试#import "[ProductName]-Swift.h"它时会在-Swift.h文件中抛出许多编译错误,例如:

找不到'NSApplicationDelegate'的协议声明,你的意思是'NSConnectionDelegate'吗?

没有名为'NSTableViewDataSource'的类型协议

等等...

我已经研究了其他几个类似的问题,例如我可以将Swift与C++混合使用吗?就像Objective - C .mm文件一样,它似乎没有给我一个明确的答案或解决方案.

在我看来,我目前的解决方法是在Objective-C中创建一个使用Swift代码然后将其导入Objective-C++代码的包装器对象.

objective-c objective-c++ swift

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