我刚刚在ES6中发现了Exotic Objects.我努力了解它们并且无法找到太多简单的信息,因此我有很多疑问:
Object.create(proto)只是在异国情调的对象的原型上没有按预期工作(例如Object.create(Array.prototype),并不完全有效),但后来我意识到它也不能像原型那样工作,Set并且Map看起来并不像作为异国情调的物体......这些是与异国情调不同的其他一些特殊物品吗?我对异国情调的物体很困惑; 对它们的一般概述将不胜感激.
它经常发生在我身上有AA容器C的类型(或任何类型的包装类,甚至是智能指针)T1,并希望这种转换C<T1>成C<T2>,其中T2是兼容的T1.
C++不允许我直接转换整个容器,并且强制a reinterpet_cast会导致未定义的行为,所以我需要创建一个新的C<T2>容器并使用生成的C<T1>项目重新填充它T2.这种操作在时间和空间上都非常昂贵.
而且许多情况下,我敢肯定,强制reinterpret_cast将正常工作与任何编译器编译的代码曾经存在,例如,当T2是T1 const时,或者T1和T2是指针.
是否有转换任何清洁和高效的方式C<T1>在C<T2>?
例如,一个container_cast运算符(/ function?)创建并重新填充C<T2>if和only,如果它不是二进制兼容的C<T1>?
我经常发现很难决定并且不一致.我可以遵循一些规则吗?
例如:
def remove_except(haystack, needle, exclude_value):
for key in hackstack:
if key in needle and haystack[key] != exclude_value:
hackstack.pop(key)
Run Code Online (Sandbox Code Playgroud)
可能很容易:
def remove_except(needle, exclude_value, haystack):
for key in hackstack:
if key in needle and haystack[key] != exclude_value:
hackstack.pop(key)
Run Code Online (Sandbox Code Playgroud)
这不是一个完美的例子,因为我倾向于将变量作为第一个参数进行修改,例如haystack,这甚至可能是一个惯例,但除此之外,我不确定该怎么做.
我对比Python更多的语言感兴趣.
我需要知道我应该使用哪种组来对LDAP中的用户进行分组.
我基本上需要函数MemberOf,以获得基于组成员身份的一些权限.
例:
用户1是第1组和第2组的成员.
这些组需要是动态的,如Active Directory.
问题来了,因为我有这些选择:
Samba: Group Mapping
User Group
Generic: Posix Group
对于用户来说也是如此,我应该选择哪一个?
Generic: User Account
Samba: Account
我找不到一个显示差异的好网站,任何链接都将非常感激.
通常我可以使用一些工具来静态分析我的代码,以帮助我使其更清洁.像编译器警告的东西,但这些还不够.我时不时地想要写一个(使用clang库或gccxml),但我想这需要太多的工作.
我想到的一些事情是:
寻找神奇的数字(即:不同于0的硬编码常数).
检查三个规则是否始终受到尊重(每个类必须定义所有析构函数,复制构造函数和赋值运算符,或者都不定义).
我也梦想(但这些东西都是纯粹的乌托邦)关于预处理器,它解析一些非标准代码并将其转换为有效的C++代码,这个工具能够:
扩展模板别名,以便我可以在C++中使用它们(好吧,使用C++ 0x不再需要它)
在文件末尾移动内联函数,这样我就不必遵守declare-before-use规则,并且能够像在Java中一样编写内联类.
提供扩展语法,如支持自定义运算符(将在函数调用中扩展),或一些特殊语法/关键字,以轻松实现某些模式.
有没有任何工具,能够做这些事情的一部分?
否则你会建议哪些库来实现这些任务(clang libs,gccxml,...),你认为需要做多少工作?
我有一个特质课,我需要多次专攻(和部分特化).
一些部分专业化重叠:
template< typename T > struct C { };
template< typename T1, typename T2 > struct TRAIT { };
template< typename T > struct TRAIT< T, T > { };
template< typename T1, typename T2 > struct TRAIT< C<T1>, C<T2> > { };
int main( ) {
// ERROR! could be both TRAIT<T,T> [with T = C<int>]
// and TRAIT<T1,T2> [with T1 = T2 = int]
TRAIT< C<int>, C<int> > foo;
return 0;
};
Run Code Online (Sandbox Code Playgroud)
我怎么能用工作代码获得相同的结果?
我疯了同enable_if和is_same …
描述一个数据结构,其中:
n无孔i(即:与整数相关联的项目i)应尽可能快
i应该尽可能快
i起i也应该尽可能快
i+1起编辑:我忘记的一件小事:项目索引只能在添加/删除一个时移动,它们不能随机交换.
在本说明书中n是结构的大小(即:它包含多少项),当然i是通用整数(1 <= i<= n).
我是从我在教职员工遇到的那个人那里听到的.不知道这是一个面试问题,一个考试问题,只是一个谜语或什么,但我想这可能是一切.
如果我没记错的话(但是,嘿,它是在12月24日之前),他说这样的数据结构既可以通过O(sqrt n)插入/转移和O(1)访问时间实现,也可以O(log n)用于任何操作.
编辑:已经给出了一些正确的答案.如果您不想再考虑这个问题,请阅读它.
Koenig查找的基本原理是什么?
无法避免将其视为使您的代码更难以阅读且更不稳定的东西.
他们不能定义Koenig查找,以便它只适用于特定情况(即:非成员运营商)或明确要求时?
我有这个琐碎的类层次结构:
class Base {
public:
virtual int x( ) const = 0;
};
class Derived : public Base {
int _x;
public:
Derived( int x ) : _x(x) { }
int x( ) const { return _x; }
};
Run Code Online (Sandbox Code Playgroud)
如果我malloc用来分配一个实例Derived,然后尝试访问多态函数x,程序崩溃(我得到一个分段错误):
int main( ) {
Derived *d;
d = (Derived*) malloc( sizeof(Derived) );
*d = Derived( 123 );
std::cout << d->x() << std::endl; // crash
return 0;
}
Run Code Online (Sandbox Code Playgroud)
当然我的实际应用程序要复杂得多(它是一种内存池).
我很确定这是因为我分配的方式d:我没有使用new.
我知道 …
Android-NDK附带自己的编译器来构建本机代码.我当前的android-NDK安装附带的版本是arm-linux-androideabi-g++ (GCC) 4.6.x-google 20120106 (prerelease),我猜它是GCC 4.6的一个分支.
它和普通(香草)GCC 4.6有什么区别?它是否为ARM平台生成更好的代码?
我想使用其他编译器为android构建软件,比如vanilla GCC 4.7或Clang,因为他们对C++ 11有更好的支持并实现了我正在努力使用的一些功能(比如模板别名).
是否可以使用最新的香草GCC或Clang来构建Android的本机代码?我应该使用什么参数?
使用与android-SDK附带的编译器不同的编译器有什么缺点?
c++ ×6
algorithm ×1
alignment ×1
ambiguity ×1
android ×1
android-ndk ×1
build ×1
c ×1
casting ×1
coding-style ×1
containers ×1
conventions ×1
ecmascript-6 ×1
javascript ×1
ldap ×1
malloc ×1
memory ×1
new-operator ×1
openldap ×1
parsing ×1
preprocessor ×1
rationale ×1
templates ×1