我有一个简单的模板化包装结构,其成员函数调用.error()其模板类型的对象.
template <typename T>
struct Wrapper {
T t;
decltype(auto) f() {
return t.error(); // calls .error()
}
};
Run Code Online (Sandbox Code Playgroud)
如果我使用没有error()成员函数的类型实例化它,只要我不调用它就没问题.这是我想要的行为.
Wrapper<int> w; // no problem here
// w.error(); // uncommented causes compilation failure
Run Code Online (Sandbox Code Playgroud)
如果我使用我认为是跟踪返回类型的语义等价物,它就会在变量声明中出错
template <typename T>
struct Wrapper {
T t;
auto f() -> decltype(t.error()) {
return t.error();
}
};
Wrapper<int> w; // error here
Run Code Online (Sandbox Code Playgroud)
我会接受这两个语义在语义上是等价的,但无论如何都要使用尾随返回类型(仅限C++ 11)来获取前者的行为而不使用某种HasErrortmp技巧来专门化整个类?
clang拒绝了gcc允许的代码:
int main() {
static constexpr const void *vp = nullptr;
static constexpr const char *cp = static_cast<const char*>(vp);
}
Run Code Online (Sandbox Code Playgroud)
具有以下内容:
error: constexpr variable 'cp' must be initialized by a constant expression
static constexpr const char *cp = static_cast<const char*>(vp);
Run Code Online (Sandbox Code Playgroud)
在阅读N3797 5.9/2中的最终列表后,我没有看到任何禁止static_cast在常量表达中使用的内容.我是在寻找错误的地方还是误读了什么?或者我应该打开一个反对clang的bug?
我一直在处理很多没有扩展名的 C++ 文件,:set ft=cpp每次打开它们时都必须输入太烦人了,所以我主要是在没有语法突出显示的情况下工作。有没有办法在命令行中告诉 vim 文件类型?就像是:
$ vim --ft=cpp file_name
Run Code Online (Sandbox Code Playgroud) 我有一个名为“package”的自定义包和一个名为“module”的包中的自定义模块,它有一个函数在调用时返回“test”。当我导入我的包时,如果我这样做:
from package import module
Run Code Online (Sandbox Code Playgroud)
一切正常,但如果我这样做:
from package import *
Run Code Online (Sandbox Code Playgroud)
或者
import package
Run Code Online (Sandbox Code Playgroud)
然后当尝试使用“模块”模块时,它会出现一个错误名称“模块”未定义。为什么在使用 import * 或导入包时不导入模块?
我试图调用的模块中的代码是这样的:
def printTest():
return("Test")
Run Code Online (Sandbox Code Playgroud)
调用模块的文件中的代码是这样的:
import package
print(module.printTest())
Run Code Online (Sandbox Code Playgroud) 如果我有一个像javascript的src
<script src="http://domain.com/js/script.js">
Run Code Online (Sandbox Code Playgroud)
我可以在它的末尾添加更多的值
<script src="http://domain.com/js/script.js?state=1">
Run Code Online (Sandbox Code Playgroud)
并在javascript中获取状态?
这个想法来自一种情况,我必须得到客户端解决方案并将其保存到会话但我不能通过PHP,所以我必须通过JavaScript获取它,但我不想显示源代码中的脚本
我认为这是可能的,因为我看到很多消息来源确实有像这样的链接!
我在Python代码中的while循环中有多个for循环.对于第一次迭代,一切正常.对于while循环的第二次迭代,我得到以下错误:
File ".\simulated_annealing.py", line 209, in <module>
for ii in range(0, 8, 1) :
TypeError: 'float' object is not callable
Run Code Online (Sandbox Code Playgroud)
以下是我的代码的相关部分:
而numpy.absolute(FcostOld)> = 0.001且l <= L:
Fx = []
Fy = []
Fz = []
V = []
ii = 0
for ii in range(0, 8, 1) : # ... LINE 209
Fx.append([])
Fy.append([])
Fz.append([])
for j in range(0, 13, 1) :
Fx[ii].append(0)
Fy[ii].append(0)
Fz[ii].append(0)
V.append(0.0)
print "\n l = ", l
j = 0
print "j = ", j …Run Code Online (Sandbox Code Playgroud) 我试图提供相同模板化函数的两个版本,一个用于任何可以像a一样的tuple东西,也就是说,tuple_size和它一起使用的东西std::get.我不在乎它是否得到std::arrays,只要它得到元组和对.编写通用版本没有问题,但我似乎无法使用类似元组的版本.
// 1
template <typename T>
A func(T&& t) { /* ... */ }
// 2
template <typename TupleType,
std::size_t Size=std::tuple_size<std::decay_t<TupleType>>::value>
B func(TupleType&& tup) { /* ... */ }
Run Code Online (Sandbox Code Playgroud)
用例子:
int main() {
int i;
std::vector<int> v;
auto t = std::make_tuple(1, 2.0, 'a');
auto p = std::make_tuple(1, 2.0);
A a = func(i); // calls 1
a = func(v); // calls 1
B b = func(t); // ambiguous, should call 2
b = …Run Code Online (Sandbox Code Playgroud) 我注意到奇怪的语义wrt绑定对指针和数组的引用,这些指针和数组分别在指向和数组元素的常量上有所不同.使用指针,这可以预测失败:
int* p{};
const int*& p_ref{p};
Run Code Online (Sandbox Code Playgroud)
non-const lvalue reference to type 'const int *' cannot bind to a value of unrelated type 'int *'
Run Code Online (Sandbox Code Playgroud)
有道理,指向int和指针指向const-int是两种不同的类型,const在&允许编译器生成临时之前添加一个,这有效,但不会改变上述内容.
但是,我认为应该与数组类似的不是
int arr[5]{};
const int (&arr_ref)[5]{arr};
Run Code Online (Sandbox Code Playgroud)
clang和gcc都在没有抱怨的情况下编译上面的内容,但为什么呢?我将非const引用绑定const int[5]到类型的对象int[5].为什么允许这样做?
更新: Stephen C. Dewhurst 在C++ Gotchas中描述了类似的问题#32(第82页)
看看另一个问题,我意识到我不能通过头文件使用匿名命名空间中的对象或函数,因为它会在类定义或内联函数中导致ODR违规.如果是这种情况,那么是否可以安全地在函数或类中使用命名const或constexpr static对象inline?例如,如果CONSTANT在namespace下面,它将是不安全的,但是可以使用静态链接的常量吗?
// some header file to be included by multiple .cpp files
static const/*expr*/ int CONSTANT = 2;
inline int f() {
return CONSTANT;
}
class Cls {
int mem = CONSTANT;
};
Run Code Online (Sandbox Code Playgroud) 如果我在Python中定义以下自定义类:
class Test:
hey = 'ho'
yo = 'go'
fo = 'sho'
Run Code Online (Sandbox Code Playgroud)
有没有办法使用字符串format()方法只需要传入我的对象一次,然后在所有参数中访问它.理想情况下,我希望能够做到这样的事情:
test_class = Test()
print "Hey {0.hey}, let's {1.yo}. Fo' {2.sho}".format(test_class)
Run Code Online (Sandbox Code Playgroud)
但我必须这样做:
test_class = Test()
print "Hey {0.hey}, let's {1.yo}. Fo' {2.sho}".format(test_class, test_class, test_class)
Run Code Online (Sandbox Code Playgroud)