小编Com*_* 10的帖子

为什么`is_open()`非const?

我有一个类似于下面的函数,它是const,需要在继续之前检查文件流是否打开:

bool MyClass::checkSomeStuff() const
{
    // Where outputFile_ is a std::ofstream
    if ( ! outputFile_.is_open() )
    {
        throw std::runtime_error( "Output file not open." );
    }

    // ... do more stuff
Run Code Online (Sandbox Code Playgroud)

但是,似乎我不能这样做,因为is_open()声明为:

bool is_open ( );
Run Code Online (Sandbox Code Playgroud)

(即非常数)

对我来说,像这样的函数 - 显然是一个纯粹的访问器 - 似乎有点奇怪 - 应该是非常量的.背后的逻辑是否合理?

c++ ofstream

24
推荐指数
2
解决办法
651
查看次数

float_t有什么意义,应该何时使用?

我与谁在使用旧版本的GCC(3.2.3确切地说),但想要升级客户端和一个已经给出绊脚石升级到新版本的一个原因是工作型的大小不同float_t,其,果然是正确的:

在GCC 3.2.3上

sizeof(float_t) = 12
sizeof(float) = 4
sizeof(double_t) = 12
sizeof(double) = 8
Run Code Online (Sandbox Code Playgroud)

关于GCC 4.1.2

sizeof(float_t) = 4
sizeof(float) = 4
sizeof(double_t) = 8
sizeof(double) = 8
Run Code Online (Sandbox Code Playgroud)

但这种差异的原因是什么?为什么尺寸变得越来越小,时应该和不应该使用float_tdouble_t

c floating-point double gcc

17
推荐指数
3
解决办法
1万
查看次数

GitHub API - 如何比较2次提交

可以在两次提交之间获取已更改文件的列表.类似于 Web版本中的两个提交之间的比较,但使用GitHub Api.

github

15
推荐指数
3
解决办法
1万
查看次数

这些天有什么用于'目的'?

几天前我遇到了一个微妙的错误,代码看起来像这样:

ostringstream ss;
int anInt( 7 );

ss << anInt << "HABITS";
ss << ends;
string theWholeLot = ss.str();
Run Code Online (Sandbox Code Playgroud)

的问题是,ends被粘一个"\ 0"到ostringstream这样theWholeLot本来的样子"7HABITS\0"(即,在端部的空)

现在这没有出现,因为theWholeLot当时被用来使用该const char *部分.string::c_str()这意味着null被掩盖,因为它变成了一个分隔符.但是,当这改变为使用整个字符串时,null突然意味着某些东西和比较,例如:

if ( theWholeLot == "7HABITS" )
Run Code Online (Sandbox Code Playgroud)

会失败的.这让我想到了:据推测,原因ends是回归到ostrstream流通常没有以null结束的时候,并且必须如此str()(然后抛弃而不是stringa char *)才能正常工作.

但是,既然不可能char *从a中删除ostringstream,使用ends不仅是多余的,而是潜在的危险,我正在考虑从客户代码中删除它们.

任何人都可以看到ends在一个std::string唯一的环境中使用的明显理由吗?

c++ stl ostringstream

14
推荐指数
2
解决办法
3242
查看次数

命名空间中的未命名命名空间

我被要求修改的一些代码看起来像这样:

namespace XXX {

namespace {

// some stuff

} // end of unnamed

// Some stuff within the scope of XXX

} // end of XXX
Run Code Online (Sandbox Code Playgroud)

我很难看到将未命名的命名空间嵌入另一个命名空间的优势(如果有的话),我正在考虑将其更改为:

namespace {

// some stuff

} // end of unnamed

namespace XXX {

// Some stuff within the scope of XXX

} // end of XXX
Run Code Online (Sandbox Code Playgroud)

任何意见将不胜感激.

c++ namespaces

14
推荐指数
3
解决办法
5279
查看次数

如何在TkInter中创建子窗口并与父进行通信

我正在使用TkInter创建一些对话框,并且需要能够在单击父级中的按钮时打开子子窗口(模态或无模式).然后,子项将允许创建数据记录,并且需要将此数据(记录或操作被取消)传送回父窗口.到目前为止,我有:

import sel_company_dlg

from Tkinter import Tk

def main():
    root = Tk()
    myCmp = sel_company_dlg.SelCompanyDlg(root)
    root.mainloop()

if __name__ == '__main__':
    main()
Run Code Online (Sandbox Code Playgroud)

这将调用顶级对话框,允许用户选择公司.公司选择对话框如下所示:

class SelCompanyDlg(Frame):
    def __init__(self, parent):
        Frame.__init__(self, parent)
        self.parent_ = parent
        self.frame_ = Frame( self.parent_ )
        // .. more init stuff ..
        self.btNew_ = Button( self.frame_, text="New ...", command=self.onNew )

    def onNew(self):
        root = Toplevel()
        myCmp = company_dlg.CompanyDlg(root)
Run Code Online (Sandbox Code Playgroud)

单击" 新建..."按钮后,将显示"创建公司"对话框,允许用户填写公司详细信息并单击"创建"或"取消".这是开头的一点:

class CompanyDlg(Frame):
    def __init__(self, parent):
        Frame.__init__(self, parent)
        // etc.
Run Code Online (Sandbox Code Playgroud)

我正在努力调用子对话框的最佳方式onNew()- 我有什么工作,但我不相信这是最好的方法,而且,我无法看到如何与子对话框之间传达细节.

我已经尝试过在线教程/参考资料,但我发现它要么过于简单化,要么专注于tkMessageBox.showinfo()不是我想要的东西.

python tkinter

7
推荐指数
1
解决办法
1万
查看次数

如何获取 Tkinter Canvas 小部件的背景颜色

我需要使用背景颜色作为填充颜色在 Canvas 小部件中创建一个矩形。我不在乎 Canvas 的背景是什么颜色,我只想得到颜色。所以相关的代码如下所示:

myCanvas.create_rectangle(x0, y0, x1, y1, outline=myCanvas.bgcolor(),
                          fill=myCanvas.bgcolor())
Run Code Online (Sandbox Code Playgroud)

myCanvas.bgcolor()我所追求的自然是哪里。

我看过很多设置这个和其他参数的例子,但没有一个可以获取。

python tkinter

7
推荐指数
1
解决办法
8496
查看次数

C++分析工具的建议

任何人都可以推荐任何用于C++代码的编译和运行时分析的工具吗?我日复一日地被要求识别在非常大的代码库中使用某些函数重载的位置.

我当前的方法涉及(a)使用grep/find进行文本搜索和(b)欺骗包含文件以注释掉有问题的重载,并完全重新编译从而破坏使用重载的构建.你可以想象这是非常耗时的.

顺便说一句,我在Red Hat Linux平台上这样做.

c++ code-analysis

6
推荐指数
1
解决办法
1931
查看次数

在编译时用C++检测函数

有没有办法,大概是使用模板,宏或两者的组合,我可以通常将一个函数应用于不同类的对象,但如果它们没有特定的功能,它们会以不同的方式响应吗?

我特别想要应用一个函数,如果对象具有该函数,将输出对象的大小(即集合中的对象数),但如果对象没有,则将输出一个简单的替换(例如"N/A") "T.即

NO_OF_ELEMENTS( mySTLMap ) -----> [ calls mySTLMap.size() to give ] ------>  10
NO_OF_ELEMENTS( myNoSizeObj ) --> [ applies compile time logic to give ] -> "N/A"
Run Code Online (Sandbox Code Playgroud)

我希望这可能类似于静态断言,尽管我显然想要编译不同的代码路径而不是在构建阶段失败.

c++ macros static templates

6
推荐指数
2
解决办法
3500
查看次数

有效地重新排序基于C++地图的集合的方法

我有一个大的(ish - > 100K)集合将用户标识符(一个int)映射到他们购买的不同产品的数量(也是一个int.)我需要尽可能有效地重新组织数据有多少用户拥有不同数量的产品.例如,有多少用户有1个产品,有多少用户有两个产品等.

我通过将原始数据从a std::map转换为a std::multimap(其中键和值被简单地反转)来实现这一点.然后,我可以选择使用N个产品的用户数量count(N)(尽管我也将值唯一地存储在一个集合中,所以我可以确定我迭代的值的确切数量及其顺序)

代码如下所示:

// uc is a std::map<int, int> containing the  original
// mapping of user identifier to the count of different
// products that they've bought.
std::set<int> uniqueCounts;
std::multimap<int, int> cu; // This maps count to user.

for ( map<int, int>::const_iterator it = uc.begin();
        it != uc.end();  ++it )
{
    cu.insert( std::pair<int, int>( it->second, it->first ) );
    uniqueCounts.insert( it->second );
}

// Now write this out
for ( …
Run Code Online (Sandbox Code Playgroud)

c++ algorithm stl map

6
推荐指数
1
解决办法
760
查看次数