我发现自己最近写了很多解析代码(大部分是自定义格式,但并不真正相关)。
为了增强可重用性,我选择将解析函数基于 i/o 流,以便我可以将它们与boost::lexical_cast<>.
然而,我意识到我从未在任何地方读过任何有关如何正确执行此操作的内容。
为了说明我的问题,让我们考虑一下我有三个类Foo,Bar和FooBar:
AFoo由以下格式的数据表示:string(<number>, <number>)。
ABar由以下格式的数据表示:string[<number>]。
AFooBar是一种变体类型,可以容纳 aFoo或 a Bar。
现在假设我operator>>()为我的Foo类型写了一个:
istream& operator>>(istream& is, Foo& foo)
{
char c1, c2, c3;
is >> foo.m_string >> c1 >> foo.m_x >> c2 >> std::ws >> foo.m_y >> c3;
if ((c1 != '(') || (c2 != ',') || (c3 != ')'))
{
is.setstate(std::ios_base::failbit);
}
return …Run Code Online (Sandbox Code Playgroud) 在我的公司,我们最近从VC9切换到VC10.
我们迁移了我们的项目但是,负责人告诉我们,我们必须在生产机器上保留一些用VC9编译的基本常见DLL一段时间.
这些DLL使用自定义结构,其中一些包含std::vector,std::map等等.现在,我注意到标准容器的尺寸发生了变化:一些变大了,一些变小了.结果,我们的自定义结构的大小也发生了变化.
为了解决尺寸变化引起的问题,我的一位同事想到人为地增加我们结构的尺寸,以便能够补偿未来的构件尺寸变化,以便结构保持相同的尺寸,无论我们使用何种运行时间,防止堆叠函数调用损坏.
就个人而言,我觉得这个"解决方案"很糟糕,因为虽然尺寸很重要,但结构的布局也很重要.对我来说,增加所有结构的内存占用以修复组织问题似乎是错误的.
为了缩短它,我的问题是:在函数原型中使用非C类型时,是否可以同时使用两个不同的运行时(使用所描述的技巧或任何其他技巧)?对于类似的情况你有任何好/坏的经历吗?
我注意到时区和Javascript Date对象有些奇怪.
在Linux机器上试试这个:
$ TZ='America/Sao_Paulo' js
js> new Date(2012, 9, 21, 0, 0, 0).toString()
"Sat Oct 20 2012 23:00:00 GMT-0300 (BRST)"
Run Code Online (Sandbox Code Playgroud)
我发现无法获得代表2012年10月21日的对象.每天尝试Date在00:00到01:00之间获得一个日期,从而产生前一天中午11:00到00:00之间的日期.
(Windows用户可能会将他们的时区更改为Brasilia/GMT-03以体验相同的行为)
将一小时(或一天)添加到此类日期对象会导致返回相同的日期.
我想这与在巴西特定日期发生的夏令时有关,但我绝对不知道如何处理.
我有一个循环,在一个月的日子里(对于一个日历应用程序)进行迭代,当它到达2012年10月20日时,它显然会永远循环.
必须有一些我做错了,但我不知道如何处理这种情况,因为我猜它也可能发生在其他时区.
Date在Javascript 中处理的建议方法是什么,以确保不会出现与时区/夏令时相关的问题?
我才意识到:
class A(object): pass
a = A()
a.x = 'whatever'
Run Code Online (Sandbox Code Playgroud)
Works(不会引发错误并创建新x成员).
但是这个:
a = object()
a.x = 'whatever'
Run Code Online (Sandbox Code Playgroud)
举:
AttributeError: 'object' object has no attribute 'x'
Run Code Online (Sandbox Code Playgroud)
虽然我可能永远不会在实际生产代码中使用它,但我对于不同行为的原因有点好奇.
任何提示?
我很惊讶这个问题之前没有问过SO(好吧,至少我找不到它).
你有没有在C++中设计一个方法回调模式(类似于类方法的"指针"),如果是这样,你是怎么做到的?
我知道一个方法只是一个常规函数,带有一些隐藏this参数作为上下文,我有一个非常简单的设计.然而,由于事情往往比它们看起来更复杂,我想知道我们的C++ 专家如何实现这一点,最好是以优雅和标准的方式.
欢迎所有建议!
我有一个软件,在我的公司上运行超过2 000台计算机,没有任何问题.
该软件有时会生成GUID(或UUID)使用UuidCreateSequential()(MSDN链接).
通话通常RPC_S_OK在每台计算机上返回.但就其中一个而言,它总会回归RPC_S_UUID_LOCAL_ONLY.
文件指出:
当原始计算机没有以太网/令牌环(IEEE 802.x)地址时,UuidCreateSequential函数返回RPC_S_UUID_LOCAL_ONLY.
但是,这台计算机似乎没有网络问题.它有一个具有有效和唯一MAC地址和IP地址的网卡,并且工作正常.
还有什么可以导致UuidCreateSequential()永远回归RPC_S_UUID_LOCAL_ONLY?你有没有经历过类似的情况?
我可以提供帮助,有问题的计算机运行更新的Windows XP,Service Pack 3.
我正在开发一个使用sqlite的简单应用程序,问题是以下代码
/*
...
*/
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName("hellogoodbye");
if (!db.open()) {
QMessageBox::critical(0, qApp->tr("Impossibile aprire il database"),
qApp->tr("Non è stato possibile aprire il"
"database"), QMessageBox::Cancel);}
Run Code Online (Sandbox Code Playgroud)
给我吗:
C:\Qt\2010.04\August-build-desktop/../August/main.cc:17: undefined reference to `_imp___ZN12QSqlDatabase17defaultConnectionE'
C:\Qt\2010.04\August-build-desktop/../August/main.cc:17: undefined reference to `_imp___ZN12QSqlDatabase11addDatabaseERK7QStringS2_'
C:\Qt\2010.04\August-build-desktop/../August/main.cc:17: undefined reference to `_imp___ZN12QSqlDatabaseD1Ev'
C:\Qt\2010.04\August-build-desktop/../August/main.cc:18: undefined reference to `_imp___ZN12QSqlDatabase15setDatabaseNameERK7QString'
C:\Qt\2010.04\August-build-desktop/../August/main.cc:19: undefined reference to `_imp___ZN12QSqlDatabase4openEv'
C:\Qt\2010.04\August-build-desktop/../August/main.cc:27: undefined reference to `_imp___ZN12QSqlDatabaseD1Ev'
C:\Qt\2010.04\August-build-desktop/../August/main.cc:27: undefined reference to `_imp___ZN12QSqlDatabaseD1Ev'
Run Code Online (Sandbox Code Playgroud)
我正在使用QTCreator.有人可以帮帮我吗?
可能重复:
何时使用内联函数和何时不使用它?
我已经看到许多源代码使用与inline指令不同的语法.
namespace Foo
{
class Bar
{
public:
// 1 - inline on the declaration + implementation
inline int sum1(int a, int b) { return a + b; }
// 2 - inline on template declaration + implementation
template <typename T>
inline T sum2(T a, T b) { return a + b; }
// 3 - Nothing special on the declaration...
int sum3(int a, int b);
};
// 3 - But the inline directive goes after …Run Code Online (Sandbox Code Playgroud) 我正在为我的ubuntu服务器实现一个简单的线程池机制(对于我的多客户端匿名聊天程序),我需要让我的工作线程休眠,直到需要执行一个作业(以函数指针和参数的形式) .
我现在的系统正在窗外.我(工作者线程)询问经理是否有工作,如果没有睡眠5ms.如果有,请将作业添加到工作队列并运行该功能.可怜的循环浪费.
什么我喜欢做的是做一个简单的事件性的系统.我正在考虑使用互斥体向量(每个工作一个),并在创建时将传入的互斥锁作为参数传递.然后在我的经理类(保存并分发作业)中,每当创建一个线程时,锁定互斥锁.当需要执行作业时,解锁下一个互斥锁,等待它被锁定和解锁,并重新锁定它.但是我想知道是否有更好的手段来实现这一目标.
tldr; 所以我的问题是这个.什么是使线程等待管理类工作的最有效,最有效和最安全的方法?轮询我应该考虑的技术(一次超过1000个客户端),互斥锁是否正常?还是有其他技术?
class Student{
public:
Student(int test)
:key(705)
{
if(test == key)
{cout << "A student is being verified with a correct key: "<< test << endl;
allow=1;
}
else
{
cout << "Wrong key" ;
}
}
friend void printResult();
private:
const int key;
int allow;
};
void printResult()
{
if(allow==1)
{
cout<< " Maths: 75 \n Science:80 \n English: 75" << endl;
}
}
int main()
{
int testkey;
cout << "Enter key for Bob: ";
cin >> testkey;
Student …Run Code Online (Sandbox Code Playgroud)