我目前hdiutil用来创建我的DMG.
我使用的命令是hdiutil create -size xxxg myImage.dmg -fs HFS+. 我总是把它的大小都放在一边,直到我足够接近它.
是否有更好的方法可以缩小DMG的尺寸或创建尺寸?
我第一次尝试编写一个基于for循环的范围来迭代unique_ptrs我写道:
std::vector<std::unique_ptr<Foo>> vec;
// Initialize vec
for (auto v : vec) // error
{}
Run Code Online (Sandbox Code Playgroud)
然后我意识到这是尝试使用unique_ptr创建每个元素的副本.那么我把它写成参考:
for (auto& v : vec)
{}
Run Code Online (Sandbox Code Playgroud)
在它前面添加一个const使我无法更改指针.
for (const auto& v : vec)
{
v = nullptr; // error (good!)
}
Run Code Online (Sandbox Code Playgroud)
如何编写它,以便指向的数据无法更改?例如,以下代码不应编译.
for (??? v : vec)
{
v->func();
}
class Foo
{
public:
void func();
private:
bool mBar;
}
Foo::func()
{
mbar = true; // Should cause error
}
Run Code Online (Sandbox Code Playgroud) 我正在寻找一种方法来为我的OSX Mac App Store构建自动化"构建和存档"和"管理器 - >共享......".我已经阅读了" Xcode"Build and Archive"from command line ",这是针对iPhone开发的,我希望可以为我的构建做类似的事情.
我有一个使用lambda表达式的函数.
std::vector<Bar*> mBars;
void foo(Bar* bar)
{
auto duplicateBars = std::remove_if(mBars.begin(), mBars.end(),
[bar] (const Bar* const &element)
{
return bar == element;
});
mBars.erase(duplicateBars, mBars.end());
}
Run Code Online (Sandbox Code Playgroud)
后来,我查看了代码并意识到我可以为foo的签名添加两个consts.
void foo(const Bar* const bar);
Run Code Online (Sandbox Code Playgroud)
bar现在指针和数据是常量,但是为了lambda表达式的目的,指针本身是常量,因为我按值捕获.但是,指向的数据可以更改,并且无法更改此数据,因为constlambda捕获中不允许这样做.
这对我来说不直观.我的解释是否正确?我可以使用第二个签名,但我无法保护数据不被lambda表达式更改.
举个例子,假设我正在为vector的push_back方法编写一个瘦包装器.
class Foo
{
public:
void myPushBack(Bar b); // Line in question
private:
std::vector<Bar> vec;
}
void Foo::MyPushBack(bar b)
{
vec.push_back(bar);
}
main()
{
Foo f();
f.myPushBack();
}
Run Code Online (Sandbox Code Playgroud)
我的问题是该函数的正确签名是什么myPushBack?然后我的下一个问题是,myPushBack如果vec类型是什么,该函数的正确签名是什么std::vector<weak_ptr<Bar>>?