我有一个用C++编写的以下代码:
#include <iostream>
using namespace std;
class Window;
class Level
{
int level;
int get(Window& w);
public:
Level(void): level(3) {}
void show(Window& w);
};
void Level::show(Window& w)
{
cout << get(w) << endl;
}
class Item
{
static const int item = 8;
};
class Window
{
friend int Level::get(Window& w);
int window;
public:
Window(void): window(2) {}
void show(void);
};
void Window::show(void)
{
cout << "window" << endl;
}
int Level::get(Window& w)
{
return w.window + level;
}
int main() …Run Code Online (Sandbox Code Playgroud) 我正在尝试编译摩西(机器翻译工具)。我编译时指定了boost的位置如下。
./bjam --with-boost=/home/xhotsuki/bin/boost_1_56_0 -j8
Run Code Online (Sandbox Code Playgroud)
但是我遇到了很多这样的错误。
...failed gcc.link mert/bin/gcc-4.4.6/release/debug-symbols-on/link-static/threading-multi/timer_test...
...skipped <pmert/bin/gcc-4.4.6/release/debug-symbols-on/link-static/threading-multi>timer_test.passed for lack of <pmert/bin/gcc-4.4.6/release/debug-symbols-on/link-static/threading-multi>timer_test...
gcc.link mert/bin/gcc-4.4.6/release/debug-symbols-on/link-static/threading-multi/util_test
mert/bin/gcc-4.4.6/release/debug-symbols-on/link-static/threading-multi/UtilTest.o: In function 'main':<br>
/home/xhotsuki/bin/boost_1_56_0/include/boost/test/unit_test.hpp:59: undefined reference to `boost::unit_test::unit_test_main(bool (*)(), int, char**)'
Run Code Online (Sandbox Code Playgroud)
出了什么问题?
如果foo()在varius平台上以不同的方式调用了函数,那么使用宏是否是错误的做法?
例如:
#ifdef WIN32
#define ffoo(a) foo(0)
#else
#define ffoo(a) foo(a)
#endif
Run Code Online (Sandbox Code Playgroud) 我目前这样做是为了将 JSON 保存到文件中:
with open(filename, 'w+') as f:
json.dump(data, f)
Run Code Online (Sandbox Code Playgroud)
我这样做是为了将文件中的 JSON 加载到 Python 字典中:
with open(filename, 'r') as f:
data = json.loads(json.load(f))
Run Code Online (Sandbox Code Playgroud)
我知道json.load从文件json.loads加载 JSON 并从字符串加载 JSON。
当我调用json.load(f)从文件加载 JSON 时,我得到了 JSON 对象的字符串表示:
'{"a": 1,"b": 2,"c": 3}'
Run Code Online (Sandbox Code Playgroud)
然后我调用json.loads(json.load(f))将该字符串表示形式转换为 Python 字典:
{'a': 1, 'b': 2, 'c': 3}
Run Code Online (Sandbox Code Playgroud)
我知道我也可以ast.literal_eval()用来将字符串转换为 Python 字典。
我的问题是 - 将 JSON 从文件目录加载到 Python 字典的正确方法是什么?是否真的有必要同时调用两者json.loads并将json.loadJSON 从文件中获取到字典中?
我正在用Python 3.4.1编写一个程序,它使用PySerial来测试一些硬件.
从串行端口一次读取一个字节,然后将其附加到列表中.当列表达到一定大小时,将其发送以进行处理.根据传入的数据,有时必须在列表填满之前处理数据,因此逐字节操作.
该列表随后返回:
[b'F', b'o', b'o']
Run Code Online (Sandbox Code Playgroud)
对于部分测试脚本,我需要能够将其转换为字符串,以便我可以打印:
Foo
Run Code Online (Sandbox Code Playgroud)
我的解决方案是:
b''.join([b'F', b'o', b'o']).decode("ascii")
Run Code Online (Sandbox Code Playgroud)
但它只是感觉不对.有更好的方法吗?
当启动策略设置为创建线程时std::launch::async,cppreference上给出的描述是
启动新线程以异步执行任务
如果我有一些任意的功能
double Foo(double i)
{
return i * 5.0;
}
Run Code Online (Sandbox Code Playgroud)
我async这样打电话
std::vector<double> values{5.0, 2.3, 7.1, 4.8, 1.5};
std::vector<std::future<double>> answers;
for (double value : values)
{
answers.push_back(std::async(std::launch::async,
Foo,
value));
}
Run Code Online (Sandbox Code Playgroud)
当我这样打电话时std::accumulate:
double total = std::accumulate(begin(answers),
end(answers),
0.0,
[](double x, std::future<double>& t){return x + t.get();});
Run Code Online (Sandbox Code Playgroud)
什么时候每个线程开始执行?他们一加入就开始了answers吗?或者他们等到他们get被调用?如果是这样,我是否只是强制它们按顺序执行,因为它们get是按执行顺序调用的accumulate?换句话说,我是否只是浪费时间设置这些未来,然后强迫它们同步运行?
注意
该函数Foo只是一些例子,我正在使用的实际函数做了更多工作.
我有一个具有一个固定大小的数组的一类Double,例如
Private m_values(8) as Double
Run Code Online (Sandbox Code Playgroud)
数组Let和Get方法的正确语法是什么?
Public Property Let Values (RHS(8) as Double)
m_values = RHS
End Property
Public Property Get Values() as Double
Values = m_values
End Property
Run Code Online (Sandbox Code Playgroud)
我不清楚语法的具体部分:
一个.在Let方法中,RHS(8) as Double传递8的数组的正确方法是Double什么?
湾 我可以使用赋值将一个数组复制到另一个数组吗?(例如m_values = values)
c.对于该Get方法,声明函数是正确的as Double还是应该是这样的as Double(8)?
背景
如果我有foo如下功能
void foo(std::vector<int>& values)
{
values = std::vector<int>(10, 1);
}
Run Code Online (Sandbox Code Playgroud)
然后我可以称之为
std::vector<int> values;
foo(values);
Run Code Online (Sandbox Code Playgroud)
请注意,initial vector是空的,然后填充在函数中foo.
我经常遇到我无法改变的接口(即第三方),其具有与上述相同的意图,但是使用原始数组,例如
void foo(int*& values)
{
values = new int[10];
std::fill_n(values, 10, 1);
}
Run Code Online (Sandbox Code Playgroud)
我的问题是,现在我负责管理那些记忆,例如
int* values;
foo(values);
delete[] values;
Run Code Online (Sandbox Code Playgroud)
题
有什么方法可以使用智能指针为我管理这个内存吗?我想做点什么
std::unique_ptr<int[]> values;
foo(values.get());
Run Code Online (Sandbox Code Playgroud)
但get返回一个r值的指针,所以我不能通过非const引用传递它.
我有一个地图的实现,其中ID被存储为值并标记为键.这使我能够利用地图中的自动排序,并让我识别具有最高标记的元素的ID.
for(map<int, int>::iterator i = marks.begin(); i != marks.end(); ++i)
cout << i->first << "\t" << i->second << endl;
cout << marks.rbegin()->second << endl;
cout << marks.end()->second << endl;
Run Code Online (Sandbox Code Playgroud)
产生这个输出:
312 3
420 4
512 2
752 1
1
420
Run Code Online (Sandbox Code Playgroud)
输入序列是值的递增顺序.为什么不end()显示"1"而是显示输入的最后一对的键?rbegin()和之间有什么区别end()?
Python 新手在这里。我正在尝试在处理命令后发送电子邮件。当我测试时,我收到了两封重复的电子邮件,而另一封则为 1。我的代码如下。
import smtplib
import os.path
from email.mime.text import MIMEText
msg = MIMEText("The report at *link* has been updated")
msg['Subject'] = "Test Report Notification **TEST**"
#put your host and port here
s = smtplib.SMTP_SSL('###########.net:465')
s.login('system@#########','#####')
s.sendmail('system@#####.com','bryan#########', msg.as_string())
s.quit()
print("done")
Run Code Online (Sandbox Code Playgroud)
提前致谢。我确实尝试过研究。