我正在尝试运行以下C++代码:
#include <cmath>
template<typename T, bool> class ConditionalData {
};
template <typename T> class ConditionalData<T, false> {
};
template <typename T> class ConditionalData<T, true> {
private:
T data;
public:
void setData(T _data) { data = _data; }
};
template<bool hasdata> class A {
public:
A() {
ConditionalData<double,hasdata> data;
if (hasdata) {
data.setData(sin(cos(123.4)));
}
}
};
int main(int argNum, const char**argData) {
A<false> test1;
A<true> test2;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
本质上,我想实现一个模板化的类A,其中根据模板参数执行某些操作.这些操作需要局部变量,我只想在需要时分配它们.我在这里遇到的问题是身体的问题
if (hasdata) {
data.setData(3);
}
Run Code Online (Sandbox Code Playgroud)
条件也是为hasdata = false实例化的,它不能编译(使用g ++ 5.2).任何想法如何以最干净的方式完成这项工作而不将A :: …
假设我有这个课程:
class Component1;
class Component2;
// many different Components
class Component42;
class MyClass
{
public:
MyClass(void) {};
std::list<Component1> component1List;
std::list<Component2> component2List;
// one list by component
std::list<Component42> component42List;
};
Run Code Online (Sandbox Code Playgroud)
我想创建一个具有以下签名的函数:
template<class T> void addElement(T component);
Run Code Online (Sandbox Code Playgroud)
它应该做到以下几点:
component是类型Component1,请将其添加到Component1Listcomponent是类型Component2,添加到Component2List,等等.可能吗?这样做的好方法是什么?
我可以通过以下函数获得相同的行为:
template<class T> void addElement(int componentType, T component);
Run Code Online (Sandbox Code Playgroud)
但我宁愿不必指定componentType这样的:它是无用的信息,它打开了可能的错误的大门(如果componentType不代表组件的类型).
如果在主模块中定义了枚举,为什么不能跨模块边界正确检查Python 3枚举等式?这是一个例子:
moduleA.py:
#!/usr/bin/python3
import moduleB
from enum import Enum, unique
@unique
class MyEnum(Enum):
A = 1
B = 2
# def __eq__(self,other):
# assert isinstance(other,self.__class__)
# return self.value == other.value
if __name__ == "__main__":
myVar = MyEnum.B
moduleB.doStuff(myVar)
Run Code Online (Sandbox Code Playgroud)
moduleB.py:
#!/usr/bin/python3
import moduleA
def doStuff(aVariable):
bVariable = moduleA.MyEnum.B
assert aVariable == bVariable
Run Code Online (Sandbox Code Playgroud)
在命令行上调用" ./moduleA.py "会产生:
Traceback (most recent call last):
File "./moduleA.py", line 17, in <module>
moduleB.doStuff(myVar)
File "/home/ruedi/Dropbox/Reps/stuffed/sosy/testing/moduleB.py", line 7, in doStuff
assert aVariable == bVariable
AssertionError
Run Code Online (Sandbox Code Playgroud)
取消注释枚举中的自定义相等运算符会导致断言失败.我发现在两种情况下类模块都不一样,因为在一种情况下它是"__main__".
解决这个问题的最"Pythonic方式"是什么(除了将枚举移动到自己的模块之外)? …
所以我试图训练一个简单的循环网络来检测输入信号中的"突发".下图显示了RNN的输入信号(蓝色)和所需(分类)输出,以红色显示.
因此,无论何时检测到突发,网络的输出都应从1切换到0,并与该输出保持一致.用于训练RNN的输入序列之间唯一变化的是突发发生的时间步长.
按照https://github.com/MorvanZhou/PyTorch-Tutorial/blob/master/tutorial-contents/403_RNN_regressor.py上的教程,我无法获得RNN学习.学习的RNN始终以"无记忆"方式运行,即不使用内存进行预测,如以下示例行为所示:
绿线显示网络的预测输出.在这个例子中我做错了什么,以至于无法正确学习网络?网络任务不是很简单吗?
我正在使用:
实验已经用不同的随机种子重复了几次,但结果几乎没有差异.我使用了以下代码:
import torch
import numpy, math
import matplotlib.pyplot as plt
nofSequences = 5
maxLength = 130
# Generate training data
x_np = numpy.zeros((nofSequences,maxLength,1))
y_np = numpy.zeros((nofSequences,maxLength))
numpy.random.seed(1)
for i in range(0,nofSequences):
startPos = numpy.random.random()*50
for j in range(0,maxLength):
if j>=startPos and j<startPos+10:
x_np[i,j,0] = math.sin((j-startPos)*math.pi/10)
else:
x_np[i,j,0] = 0.0
if j<startPos+10:
y_np[i,j] = 1
else:
y_np[i,j] = 0
# Define the neural network
INPUT_SIZE = 1
class …Run Code Online (Sandbox Code Playgroud) 为什么下面的代码不能编译?g++ 输出错误消息:
\n\ntest.cpp: In function \xe2\x80\x98void test(bool)\xe2\x80\x99:\ntest.cpp:11:15: error: operands to ?: have different types \xe2\x80\x98test(bool)::<lambda(int)>\xe2\x80\x99 and \xe2\x80\x98test(bool)::<lambda(int)>\xe2\x80\x99\n yadda(flag?x:y);\n ~~~~^~~~\nRun Code Online (Sandbox Code Playgroud)\n\n这对我来说没有什么意义,因为错误消息中给出的两种类型似乎是相同的。我正在使用以下代码:
\n\n#include <functional>\n\nvoid yadda(std::function<int(int)> zeptok) {\n zeptok(123);\n}\n\nvoid test(bool flag) {\n int a = 33;\n auto x = [&a](int size){ return size*3; };\n auto y = [&a](int size){ return size*2; };\n yadda(flag?x:y);\n}\nRun Code Online (Sandbox Code Playgroud)\n\n我使用“g++ -c test.cpp -std=c++14”进行编译,我的GCC版本是“6.3.0 20170406 (Ubuntu 6.3.0-12ubuntu2)”。
\n