小编Kla*_*ens的帖子

std :: forward和带有非const引用参数的构造函数

Rvalue References的简介中,提出了完美转发作为将rvalue 5转发到具有非const引用参数的构造函数的理想解决方案.

但:

#include <memory>
#include <iostream>
#include <utility>

template <class T, class A1>
std::shared_ptr<T> factory(A1&& a1) {
   return std::shared_ptr<T>(new T(std::forward<A1>(a1)));
}

class X {
public:
    X(int& i){
        std::cout<<"X("<<i<<")\n";
    }
};


int main() {
    std::shared_ptr<X> p = factory<X>(5);
}
Run Code Online (Sandbox Code Playgroud)

在XCode 4.2和G ++ 4.6.1中失败no known conversion from int to int&,而:

template <class T, class A1>
std::shared_ptr<T> factory(A1&& a1) {
   return std::shared_ptr<T>(new T(/*no forwarding*/a1));
}
Run Code Online (Sandbox Code Playgroud)

编译.我弄错了什么?

c++ perfect-forwarding c++11

7
推荐指数
2
解决办法
1721
查看次数

UITableViewController init与initWithStyle

班级参考说:

如果使用标准init方法初始化UITableViewController对象,则会创建普通样式的表视图.

我不明白,这种行为来自哪里 - 我希望在某些代码或api中看到我

  • UITableViewController在其api中没有init

  • 一些基类'init如何知道派生类的合适默认样式?

谢谢你的每一个提示

objective-c ios

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

我可以为数组写一个用户定义的推导规则向量吗?

是否有可能在std中扩展扣除规则?

#include <vector>
#include <array>

namespace std {
template< class T, size_t N >
vector(array<T, N>&) -> vector<T>;
}

int main() {

    std::array a = {2,3,5,7}; // array<int, 4> !

    std::vector w(a); 
}
Run Code Online (Sandbox Code Playgroud)

g ++ 10.0(wandbox)似乎忽略了我的版本。

根据clang9.0(也是Wandbox)在隐藏空间中的预定义规则liv:错误:推导指南必须在与模板'std :: __ 1 :: vector'相同的范围内声明

c++ arrays vector

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

objC中的类别命名约定

从iOS编程课程(cs193p fall2010)学习一些示例代码我遇到了sbjson框架,该框架通过名为SBJSON的类别扩展了NSObject等.但在+标题"NSObject + SBJSON.h"中,它读作:

@interface NSObject (NSObject_SBJSON)
Run Code Online (Sandbox Code Playgroud)

NSObject_SBJSON到SBJSON的魔术映射来自哪里?我注意到xcode在下划线之前接受了任何字符串!

但没有发现任何暗示.

thanx klaus

objective-c header-files categories

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