有没有办法在编译时检测编译器是否支持C++ 11的某些功能?例如,像这样:
#ifndef VARIADIC_TEMPLATES_SUPPORTED
#error "Your compiler doesn't support variadic templates. :("
#else
template <typename... DatatypeList>
class Tuple
{
// ...
}
#endif
Run Code Online (Sandbox Code Playgroud) 我在函数中有以下代码:
stored_blocks = {}
def replace_blocks(m):
block = m.group(0)
block_hash = sha1(block)
stored_blocks[block_hash] = block
return '{{{%s}}}' % block_hash
num_converted = 0
def convert_variables(m):
name = m.group(1)
num_converted += 1
return '<%%= %s %%>' % name
fixed = MATCH_DECLARE_NEW.sub('', template)
fixed = MATCH_PYTHON_BLOCK.sub(replace_blocks, fixed)
fixed = MATCH_FORMAT.sub(convert_variables, fixed)
Run Code Online (Sandbox Code Playgroud)
添加元素stored_blocks工作正常,但我不能增加num_converted第二个子功能:
UnboundLocalError:赋值前引用的局部变量'num_converted'
我可以使用,global但全局变量是丑陋的,我真的不需要该变量是全局的.
所以我很好奇如何写入父函数范围内的变量.
nonlocal num_converted可能会完成这项工作,但我需要一个适用于Python 2.x的解决方案.
我习惯写这样的循环:
for (std::size_t index = 0; index < foo.size(); index++)
{
// Do stuff with foo[index].
}
Run Code Online (Sandbox Code Playgroud)
但是当我在其他代码中看到迭代器循环时,它们看起来像这样:
for (Foo::Iterator iterator = foo.begin(); iterator != foo.end(); iterator++)
{
// Do stuff with *Iterator.
}
Run Code Online (Sandbox Code Playgroud)
我发现这iterator != foo.end()是有争议的.如果iterator增加多于一个也可能是危险的.
使用起来似乎更"正确" iterator < foo.end(),但我从未在实际代码中看到过这种情况.为什么不?
可以像这样创建函数指针数组:
typedef void(*FunctionPointer)();
FunctionPointer functionPointers[] = {/* Stuff here */};
Run Code Online (Sandbox Code Playgroud)
在不使用typedef?的情况下创建函数指针数组的语法是什么?
我有一个水平导航栏,如下所示:
<ul id = "Navigation">
<li><a href = "About.html">About</a></li>
<li><a href = "Contact.html">Contact</a></li>
<!-- ... -->
</ul>
Run Code Online (Sandbox Code Playgroud)
我使用CSS删除子弹点并使其水平.
#Navigation li
{
list-style-type: none;
display: inline;
}
Run Code Online (Sandbox Code Playgroud)
我试图证明文本的合理性,以便每个链接均匀分布以填满整个ul空间.我尝试添加text: justify到选择器li和ul选择器,但它们仍然是左对齐的.
#Navigation
{
text-align: justify;
}
#Navigation li
{
list-style-type: none;
display: inline;
text-align: justify;
}
Run Code Online (Sandbox Code Playgroud)
这很奇怪,因为如果我使用text-align: right它,它的行为与预期的一样.
如何均匀分布链接?
以下代码每秒输出一个随机数:
int main ()
{
srand(time(NULL)); // Seeds number generator with execution time.
while (true)
{
int rawRand = rand();
std::cout << rawRand << std::endl;
sleep(1);
}
}
Run Code Online (Sandbox Code Playgroud)
我如何调整这些数字的大小,使它们总是在0-100的范围内?
我正在尝试了解strings,但不同的来源告诉我要包含不同的标题.
有人说使用<string.h>,但其他人提到"apstring.h".我能够做一些基本的东西apstring,但我被告知另一个更强大.但是当我包含<string.h>并尝试声明一些字符串变量时,我会收到错误.适当的用法是什么?
int* myPointer = new int[100];
// ...
int firstValue = *(myPointer + 0);
int secondValue = myPointer[1];
Run Code Online (Sandbox Code Playgroud)
有没有之间的功能差异*(myPointer + index)和myPointer[index]?这被认为是更好的做法?
C++如何包含通常命名的守卫?我倾向于看到这么多:
#ifndef FOO_H
#define FOO_H
// ...
#endif
Run Code Online (Sandbox Code Playgroud)
但是,我认为这不是很直观.如果没有看到文件名,就很难分辨出它的含义FOO_H和名称所指的含义.
什么是最佳做法?