小编zap*_*lom的帖子

为什么 std::map 的比较器必须是 const?

我编写了比较器功能对象,用于std::map比较字符串而不区分大小写。

class CaseInsensitiveCmp
{
public:
    bool operator() (const std::string& op1, const std::string& op2) const
    {
        std::string op1low(op1.size(),'c'), op2low(op2.size(),'c');
        std::transform(op1.begin(), op1.end(),op1low.begin(),::tolower);
        std::transform(op2.begin(), op2.end(),op2low.begin(),::tolower);
        return op1low<op2low;
    }
};
Run Code Online (Sandbox Code Playgroud)

问题是,如果成员函数 (operator() ) 不是 const 函数,即

 bool operator() (const std::string& op1, const std::string& op2);
Run Code Online (Sandbox Code Playgroud)

编译器 XLC 编译器生成 en 错误

CaseInsensitiveCmp::operator()(const std::string &, const std::string &)" is not a viable candidate.
Run Code Online (Sandbox Code Playgroud)

任何人都可以参考 C++ 标准中规定比较功能对象成员函数必须是 const 的任何一点吗?

c++ xlc

6
推荐指数
0
解决办法
99
查看次数

具有更多模板参数的模板友元类

我有一个带有三个模板参数的类模板Obj1

template < class A, class B, class C >
class Obj1
{
      // some implementation
};
Run Code Online (Sandbox Code Playgroud)

和带有两个模板参数的第二类模板Obj2,

 template < class A, class B >
    class Obj2
    {
          // some implementation
    };
Run Code Online (Sandbox Code Playgroud)

所以我的问题如下:

我想让类Obj1成为Obj2类的朋友,前两个模板参数具有相同的值,但我不知道如何编写它的确切语法,起初我试过这种方式

template < class A, class B>
class Obj2
{
    template< class C>
    friend class Obj1<A,B,C>;
};
Run Code Online (Sandbox Code Playgroud)

但它没有编译,所以如果可以,请求帮助我.

c++

5
推荐指数
1
解决办法
96
查看次数

将std :: string转换为ndk jstring

我正在尝试为现有的C ++代码创建Java接口。我的功能之一与此相似:

JNIEXPORT jstring JNICALL Java_com_testproxy_NativeInterface_serialize
    (JNIEnv* env, jobject obj, along op)
{
     return env -> NewStringUTF(<somestdstring>.c_str());
}
Run Code Online (Sandbox Code Playgroud)

问题在于,在某些情况下,第一个元素为'\ 0',因此,返回值是一个空字符串。那么是否有一些将char *转换为jstring的函数,该函数也将字符串的长度作为参数?

c++ java android android-ndk

5
推荐指数
1
解决办法
2382
查看次数

通过Inno Setup创建的安装程序无法在Windows 10上的安装过程中关闭应用程序

我已经使用Inno Setup为我的应用程序创建了一个安装程序。有一阵子一切正常,但最近安装程序explorer.exe在安装期间无法在Windows 10上关闭(Windows资源管理器)。安装程序需要重新启动以将现有的上下文菜单处理程序替换为新的安装程序,但更奇怪的是,同一安装程序在Windows 8和8.1上也可以正常工作。添加restartreplace标志没有帮助。

我还注意到安装程序无法关闭当前正在运行的应用程序(需要更新的旧应用程序),并且像先前的问题一样,可以使用相同的安装程序在Windows 8或8.1中关闭该应用程序。

这是Inno Setup安装程序的日志:

[11:22:34.819]   Setup application started
[11:22:34.983]   Setup version: Inno Setup version 5.5.9 (a)
[11:22:34.984]   Original Setup EXE: ***
[11:22:34.984]   Setup command line: /SL5="$C0928,15589089,85504,***" /DEBUGWND=$30464 
[11:22:34.985]   Windows version: 10.0.14393  (NT platform: Yes)
[11:22:34.985]   64-bit Windows: Yes
[11:22:34.985]   Processor architecture: x64
[11:22:34.985]   User privileges: Administrative
[11:22:34.987]   64-bit install mode: Yes
[11:22:34.991]   Created temporary directory: C:\Users\Azat\AppData\Local\Temp\is-M4710.tmp
[11:22:37.584]   RestartManager found an application using one of our files: Windows Explorer
[11:22:37.585]   Can use RestartManager …
Run Code Online (Sandbox Code Playgroud)

installer inno-setup

4
推荐指数
2
解决办法
1822
查看次数

使用boost :: asio发送HTTP GET请求,类似于cURL

我正在尝试使用某个域的REST API发送http GET请求。基本上我想要做的是替换以下curl请求:

    curl -k  -H "Content-Type: application/json" -X GET 
--data '{"username":"user@name.co", "password":"test"}' https:/domain.name/api/login/
Run Code Online (Sandbox Code Playgroud)

与一些使用C ++代码boost::asio。我没有什么可以在这里找到所有c ++代码的方法,但是某些检查点会很棒。

c++ curl boost boost-asio

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

Qt 应用程序不退出

谁能告诉我为什么这个简单的 qt 应用程序不退出

int main(int argc, char* argv[])
{ 
QApplication app(argc,argv);
 QWidget* w = new QWidget(nullptr);
 w->show();
 w->close();
 app.exec();
 return 0;
}
Run Code Online (Sandbox Code Playgroud)

我试图用这个循环显示所有顶级小部件

for (auto t : QApplication::topLevelWidgets())
    {
        t->show();
    }
Run Code Online (Sandbox Code Playgroud)

并且关闭后小部件不会被销毁,

甚至添加

w->setAttribute(Qt::WA_QuitOnClose);
Run Code Online (Sandbox Code Playgroud)

没有帮助。

我正在使用 Visual Studio 2013 和 Qt 版本 5.4

c++ qt visual-studio

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

标签 统计

c++ ×5

android ×1

android-ndk ×1

boost ×1

boost-asio ×1

curl ×1

inno-setup ×1

installer ×1

java ×1

qt ×1

visual-studio ×1

xlc ×1