我希望能够使用ssh从我的机器运行命令并传递环境变量 $BUILD_NUMBER
这是我正在尝试的:
ssh pvt@192.168.1.133 '~/tools/myScript.pl $BUILD_NUMBER'
Run Code Online (Sandbox Code Playgroud)
$BUILD_NUMBER
在进行ssh调用的机器上设置,因为远程主机上不存在该变量,所以它不会被拾取.
我如何传递值$BUILD_NUMBER
?
我一直在阅读:
http://alfonse.bitbucket.io/oldtut/Basics/Tut01%20Dissecting%20Display.html
我不太清楚这个功能是做什么的.
我认为它可以使用给定的VBO,但我不确定.
我以为那就是做了什么glEnableClientState(GL_VERTEX_ARRAY)
.
因此,对于Haskell中的任何内置类型,我可以构造一个算术序列,就像这个(for Int
或Integer
等)
[1..5]
Run Code Online (Sandbox Code Playgroud)
但是如果我定义一个枚举类型:
data Suit = Club | Diamond | Heart | Spade deriving (Show, Enum)
Run Code Online (Sandbox Code Playgroud)
当我创建一个算术序列时,我必须在枚举实例和点点之前包含空格,例如
[Club .. Diamond]
Run Code Online (Sandbox Code Playgroud)
为什么?
考虑以下程序:
template<template<typename ...> class>
struct foo {};
template<template<typename> class C>
struct foo<C> {};
int main() {}
Run Code Online (Sandbox Code Playgroud)
Clang拒绝了它的错误:
类模板部分特化不会专门化任何模板参数
即使在最新的clang 7.0 HEAD中,请参见此处的演示.但是,gcc接受了它.
请参阅[temp.class.spec],其中陈述了部分特化的规则,我找不到任何禁止该模板的部分特化的东西.特别是,专业化确实更专业,错误消息看起来不正确.
编辑:
但是,gcc的行为也是异常的,请考虑以下程序:
#include <iostream>
template<template<typename ...> class>
struct foo { void show() { std::cout << "Primary.\n"; } };
template<template<typename> class C>
struct foo<C> { void show() { std::cout << "Specialized.\n"; } };
template<class...> struct bar {};
int main() {
foo<bar> f;
f.show();
}
Run Code Online (Sandbox Code Playgroud)
事实证明,gcc在这种情况下使用专用版本,请参见此处.
现在我想问:
是标准允许的这种局部专业化吗?
哪个编译器是正确的?(一个/全部/没有?)
C++03 3.6.1.3
:函数main不得在程序中使用(3.2)....
我想知道为什么这个规则存在...是否有人知道任何系统/实现,如果使用main,它将是一个问题?
PS 1.我知道该术语的定义used
.2.我知道有一些简单的解决方法,比如从main()调用单个MyMain()并使用MyMain()代替.3.问题是关于现实世界的实施,如果不存在限制则会产生问题.谢谢!
我想编写一个接受可变数量的字符串文字的函数.如果我用C语写作,我必须写一些类似于:
void foo(const char *first, ...);
Run Code Online (Sandbox Code Playgroud)
然后调用看起来像:
foo( "hello", "world", (const char*)NULL );
Run Code Online (Sandbox Code Playgroud)
感觉它应该可以在C++中做得更好.我想出的最好的是:
template <typename... Args>
void foo(const char* first, Args... args) {
foo(first);
foo(args);
}
void foo(const char* first) { /* Do actual work */ }
Run Code Online (Sandbox Code Playgroud)
被称为:
foo("hello", "world");
Run Code Online (Sandbox Code Playgroud)
但是我担心递归本质,以及我们在得到单个参数之前不进行任何类型检查的事实,如果有人调用,会使错误混乱foo("bad", "argument", "next", 42)
.我想要写的,是这样的:
void foo(const char* args...) {
for (const char* arg : args) {
// Real work
}
}
Run Code Online (Sandbox Code Playgroud)
有什么建议?
编辑:还有选项void fn(std::initializer_list<const char *> args)
,但这使得foo({"hello", "world"});
我想避免的呼叫.
我有一些琐碎的日志记录:
BOOST_LOG_TRIVIAL(trace) << make_trace_record();
Run Code Online (Sandbox Code Playgroud)
现在make_trace_record
是一个有点贵的功能(不要问为什么,这很复杂).我只想在日志当前通过过滤时调用它.我怎样才能做到这一点?我没有看到明确调用严重性过滤器的方法.
在当前的标准草案(和C++ 17)中,这是关于static_casting的void *
:
类型"指针的prvalue CV1空隙"可以被转换成类型的prvalue"指针CV2 T",其中T是一个对象类型和CV2是相同的CV-资格,或更大的CV-资格比,CV1.如果原始指针值表示存储器中字节的地址A而A不满足T的对齐要求,则未指定结果指针值.否则,如果原始指针值指向对象a,并且存在类型为T(忽略cv-qualification)的对象b,该对象b是指针可互换的,则结果是指向b的指针.否则,转换指针值不变.
我想知道,转换是指针可互换的有什么区别?有没有一种情况,当一个void *
东西指向一个指针 - 可互换实际上改变指针值?这种区别的意图是什么?
对于完整性指针可互换:
如果出现以下情况,则两个对象a和b是指针可互换的:
- (4.1)它们是同一个对象,或者
- (4.2)一个是union对象,另一个是该对象的非静态数据成员([class.union]),或者
- (4.3)一个是标准布局类对象,另一个是该对象的第一个非静态数据成员,或者,如果该对象没有非静态数据成员,则该对象的任何基类子对象([class. mem]),或
- (4.4)存在对象c,使得a和c是指针可互换的,并且c和b是指针可互换的.
如果两个对象是指针可互换的,则它们具有相同的地址,并且可以通过reinterpret_cast从指向另一个的指针获得指向一个对象的指针.
什么是理由
(8)可以在任何实例化之前检查模板的有效性.[注意:知道哪些名称是类型名称允许以这种方式检查每个模板的语法.- 结束注释]程序格式错误,无需诊断,如果:
[..]
(8.3)可变参数模板的每个有效特化都需要一个空的模板参数包,或者
该规则不允许使用如下强制模板扣除的技巧:
template <typename ...Ts,
typename A,
typename B,
std::enable_if_t<sizeof...(Ts) == 0, int> = 0> // Ill-formed NDR :-(
Pair<std::decay_t<A>, std::decay_t<B>> MakePair(A&&a, B&& b)
{
return {a, b};
}
Run Code Online (Sandbox Code Playgroud)
注意:我知道C++ 17演绎规则make_*
已经过时了.
无序的设置键是只读的,所以为什么在这种情况下我可以擦除元素:
std::unordered_set<std::string> s;
s.emplace("sth");
s.erase("sth");
Run Code Online (Sandbox Code Playgroud)
而在这不是:
std::unordered_set<std::string const> s;
const std::string str("sth");
s.emplace(str);
s.erase(str);
Run Code Online (Sandbox Code Playgroud)
如果设置本身就是const它会有意义但是使用const键我不太明白.这个断言失败了:
static_assert(!is_reference<_Tp>::value && !is_const<_Tp>::value, "");
Run Code Online (Sandbox Code Playgroud)
为什么会写那个断言的人,检查密钥是不是const?
编辑:
实际上,上面的代码编译得很好std::set
.因为std::unordered_set
,失败直接在实例化.重现的最小例子:
// define a customized hash ...
int main() { sizeof(std::unordered_set<int const>); }
Run Code Online (Sandbox Code Playgroud)