我知道还有其他类似的问题,但是(我可以将C++ 11与Xcode一起使用吗?)但主要与旧版本的Osx或xcode相关,所以它们似乎并不是正确的解决方案来继续使用Osx Lion和xcode 4.1.osx Lion对c ++ 0x功能有什么要求?我想我必须使用新的libc ++作为标准库,将LLVM 3.0设置为编译器.是否有一种默认方式让LLVM 3.0在Lion上运行?
编辑:好吧,看起来它只是时间问题,直到LLVM 3.0将成为xcode 4的一部分:http: //oleb.net/blog/2011/07/whats-new-for-developers-in-lion-part-1 /
我知道直到最近才有可能为CMake生成的xcode项目选择任何特定的编译器(它总是选择xcodes默认编译器).无论如何这篇文章:http://cmake.3232098.n2.nabble.com/CMake-2-8-1-available-for-download-td4752230.html 让我相信它现在应该可以使用特定的CMAKE_XCODE_ATTRIBUTE_标志.-遗憾的是,我既没有找到应该更改xcodes编译器的标志,也没有找到CMake支持的所有xcode标志的列表.
我正在使用Xcode 4.2和CMake 2.8.6,我希望能够在CMake中切换LLVM 3.0和LLVM GCC 4.2.
正如我所说的一个列表,其中列出了我可以在CMake中更改的所有xcode标志,这将是很棒的!
谢谢
编辑:
使用Cmake 2.8.6,如果要生成不默认为Clang/LLVM 3.0的xcode项目,请使用以下命令:
set(CMAKE_XCODE_ATTRIBUTE_GCC_VERSION "com.apple.compilers.llvmgcc42")
Run Code Online (Sandbox Code Playgroud) 我不确定我是否搜索了错误的条款,但我在这个问题上找不到多少.我在osx上,我想将一个命令行python脚本编译成一个小命令行应用程序,我可以放入usr/local/bin,这样我就可以从任何地方调用它.有没有直接的方法来做到这一点?
谢谢
我目前正在用C++编写一个小的自定义内存分配器,并希望将它与运算符重载new/ 一起使用delete.无论如何,我的内存分配器基本上检查请求的内存是否超过某个阈值,如果是,则使用malloc分配请求的内存块.否则,内存将由一些fixedPool分配器提供.这通常有效,但对于我的释放函数看起来像这样:
void MemoryManager::deallocate(void * _ptr, size_t _size){
if(_size > heapThreshold)
deallocHeap(_ptr);
else
deallocFixedPool(_ptr, _size);
}
Run Code Online (Sandbox Code Playgroud)
所以我需要提供指向的块的大小,从正确的位置解除分配.
现在的问题是delete关键字没有提供任何关于已删除块的大小的提示,所以我需要这样的东西:
void operator delete(void * _ptr, size_t _size){
MemoryManager::deallocate(_ptr, _size);
}
Run Code Online (Sandbox Code Playgroud)
但据我所知,没有办法确定删除操作符内的大小.-如果我想保持现在的状态,我是否必须自己保存内存块的大小?
我正在使用NSTimer设置在Cocoa中运行mainLoop,如下所示:
mainLoopTimer = [NSTimer scheduledTimerWithTimeInterval:1.0/fps target:self selector:@selector(mainloop) userInfo:nil repeats:YES];
[[NSRunLoop currentRunLoop] addTimer:mainLoopTimer forMode:NSEventTrackingRunLoopMode];
Run Code Online (Sandbox Code Playgroud)
在程序启动时,我将timeInterval设置为0.0,以便mainloop尽可能快地运行.无论如何,我想提供一个函数来在运行时将帧速率(以及计时器的时间间隔)设置为特定值.不幸的是,据我所知,这意味着我必须重新初始化计时器,因为Cocoa不提供像"setTimerInterval"这样的函数这是我试过的:
- (void)setFrameRate:(float)aFps
{
NSLog(@"setFrameRate");
[mainLoopTimer invalidate];
mainLoopTimer = nil;
mainLoopTimer = [NSTimer scheduledTimerWithTimeInterval:1.0/aFps target:self selector:@selector(mainloop) userInfo:nil repeats:YES];
[[NSRunLoop currentRunLoop] addTimer:mainLoopTimer forMode:NSEventTrackingRunLoopMode];
}
Run Code Online (Sandbox Code Playgroud)
但是这会引发以下错误并停止主循环:
2010-06-09 11:14:15.868 myTarget [7313:a0f] setFrameRate 2010-06-09 11:14:15.868 myTarget [7313:a0f] *__NSAutoreleaseNoPool():类__NSCFDate的对象0x40cd80自动释放,没有池到位 -只是泄漏2010-06-09 11:14:15.869 myTarget [7313:a0f]* __NSAutoreleaseNoPool():类NSCFTimer的对象0x40e700自动释放,没有池到位 - 只是泄漏0.614628
我还尝试使用"retain"关键字重新创建计时器,但这并没有改变任何东西.有关如何在运行时动态更改NSTimer间隔的任何想法?
谢谢!
我疯了...我正在尝试将我的项目的升级从1.44.0升级到osx雪豹上的1.47.0 .-我想用以下命令构建它:
./b2 macosx-version=10.6 link=static address-model=32_64 threading=multi stage
Run Code Online (Sandbox Code Playgroud)
我希望它能给我一个支持i386以及x86_64的静态胖版本.无论如何,它显然没有,因为如果我查询lipo -info生成的库,它们都是x86_64.-我该怎么做才能解决这个问题?可能是构建脚本坏了吗?
我知道如何从cocoa的Resources文件夹中获取特定文件,即:
NSBundle* myBundle = [NSBundle mainBundle];
NSString* myImage = [myBundle pathForResource:@"Seagull" ofType:@"jpg"];
Run Code Online (Sandbox Code Playgroud)
无论如何,我想有一个简单的函数,它给我一个Resources文件夹的路径,所以我可以像这样在c ++中使用它.
String getResourcePath()
{
return the correct path here
}
std::ofstream theFile;
theFile.open(getResourcePath()+"test.txt");
Run Code Online (Sandbox Code Playgroud)
我想我可以手动将主要包名称与内容/资源结合起来,无论如何我想知道是否有更强大的解决方案!
谢谢!
在IOS上,您可以[[AVAudioSession sharedInstance] sampleRate];用来检索音频驱动程序使用的当前采样率。AVAudioSession在OSX上不存在,所以我想知道如何在OSX上实现相同的目的,因为我在该主题上找不到很多东西。
谢谢
我正在GCC 5.3尝试让一些函数包装器代码工作,它可以正常工作clang.这是一个简单的例子:
#include <iostream>
using namespace std;
template<class Sig, Sig F>
struct FunctionWrapper;
template<class Ret, class... Args, Ret (*Func)(Args...)>
struct FunctionWrapper<Ret(Args...), Func>
{
};
static int testFunc(int _a, int _b)
{
return _a + _b;
}
int main() {
FunctionWrapper<int(int, int), testFunc> wrapper;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我在gcc上遇到的错误如下:
prog.cpp:9:46:错误:'Ret(Args ...)'不是模板非类型参数的有效类型struct FunctionWrapper ^ prog.cpp:在函数'int main()'中:prog.cpp :20:45:错误:'int(int,int)'不是模板非类型参数FunctionWrapper包装器的有效类型;
关于如何使这两者兼顾的任何想法,clang和gcc?
谢谢!
我正在寻找一种在编译时动态构建类型列表的方法.我正在创建包含不同类型的组件,并且我想构建一个类型列表,其中包含注册为组件的所有类型.想象一下:
using Name = Component<std::string>;
using Position = Component<Vec2f>;
Run Code Online (Sandbox Code Playgroud)
那么我希望能够与持有型列表落得std::string和Vec2f在这种情况下,我可以访问和扩展,即是这样的:
using AllComponents = SomeMagicTypeThatHoldsAllComponents;
Run Code Online (Sandbox Code Playgroud)
我已经构建了类型列表部分,它的工作原理如下:
using List = typename MakeTypeList<int, double, std::string>::List;
Run Code Online (Sandbox Code Playgroud)
您可以将类型追加或添加到List这样:
using Append = typename AppendType<List, float>::List;
using Prepend = typename PrependType<List, Vec2f>::List;
Run Code Online (Sandbox Code Playgroud)
并按照这样的索引获取类型(这基本上允许您在帮助下扩展类型std::integer_sequence):
using FirstType = typename TypeAt<List, 0>::Type;
Run Code Online (Sandbox Code Playgroud)
我无法解决的问题是如何在后台动态构建此列表而不破坏简单的组件API.有人建议是否或如何实现这一目标?
编辑: 要澄清,我现在能想出的唯一解决方案是将类型列表作为额外的模板参数传递,即
using AllTypes = using MakeTypeList<>::List;
using Name = Component<AllTypes, std::string>;
using Position = Component<AllTypes, Vec2f>;
Run Code Online (Sandbox Code Playgroud)
我感兴趣的是一个解决方案,我不必通过类型列表.
谢谢!