小编Vio*_*ffe的帖子

应用内购买:获取要求购买的Google Play帐户的名称或ID

我想获得购买用户的名称/ ID.AccountManager如果可能的话,我想不这样做,因为它的使用需要额外的许可.即使AccountManager我没有看到确定当前账户的方法,所以欢迎任何建议.

android in-app-billing android-account google-play android-billing

19
推荐指数
1
解决办法
4151
查看次数

为什么我不能reintpret_cast uint到int?

这就是我想要做的事情:

const int64_t randomIntNumber = reinterpret_cast<int64_t> (randomUintNumber);

randomUintNumber的类型uint64_t.

错误是(MSVC 2010):

错误C2440:'reinterpret_cast':无法从'const uint64_t'转换为'int64_t'1>转换是一种有效的标准转换,可以隐式执行,也可以使用static_cast,C风格的转换或函数式转换

为什么不编译?两种类型都有相同的位长,是不是reinterpret_cast用于什么?

c++ type-conversion reinterpret-cast

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

Qt:互斥的可检查菜单项?

许多Windows程序具有互斥的可检查菜单项.Qt Designer允许使每个单独的项目可检查或不可检查.但有没有办法将一堆物品分组并使它们相互排斥?

qt menu

16
推荐指数
1
解决办法
5688
查看次数

当尝试实现类型特征时,我的 SFINAE 应用程序有什么问题?

decay_t我需要一个类型特征,将枚举衰减为其基础类型,并且与所有其他类型的工作方式相同。我编写了以下代码,显然这不是 SFINAE 的工作方式。但这就是我认为它应该工作的方式,那么这段代码到底有什么问题以及我对 C++ 的理解有何差距?

namespace detail {
    template <typename T, std::enable_if_t<!std::is_enum_v<T>>* = nullptr>
    struct BaseType {
        using Type = std::decay_t<T>;
    };

    template <typename T, std::enable_if_t<std::is_enum_v<T>>* = nullptr>
    struct BaseType {
        using Type = std::underlying_type_t<T>;
    };
}

template <class T>
using base_type_t = typename detail::BaseType<T>::Type;
Run Code Online (Sandbox Code Playgroud)

MSVC中的错误完全无法理解:

“detail::BaseType”:模板参数“__formal”与声明不兼容

在 GCC 中,情况要好一些 - 表示第二个模板参数的声明在两个BaseType模板之间不兼容。但根据我对 SFINAE 的理解,对于任何给定的 T 来说,只有一个应该可见,而另一个应该由于enable_if.

神箭链接

c++ sfinae type-traits c++17

16
推荐指数
3
解决办法
1367
查看次数

如何确定Qt中驱动器上有多少可用空间?

我正在使用Qt并希望获得可用的可用磁盘空间的平台无关方式.

我知道在Linux中我可以使用statfs,在Windows中我可以使用GetDiskFreeSpaceEx().我知道助推有办法,boost::filesystem::space(Path const & p).

但我不想要那些.我在Qt,并希望以Qt友好的方式做到这一点.

我看了看QDir,QFile,QFileInfo-没有!

c++ filesystems qt

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

如何在模板代码中使用编译时常量条件避免"条件表达式是常量"警告?

考虑一下代码:

template <typename T>
CByteArray serialize(const T& value)
{
    if (std::is_pod<T>::value)
        return serializePodType(value);
    else if (std::is_convertible<T, Variant>::value)
        return serialize(Variant(value));
    else
    {
        assert(0 == "Unsupported type");
        return CByteArray();
    }
}
Run Code Online (Sandbox Code Playgroud)

显然,编译器给我这个警告if (std::is_pod<T>::value)等是正确的,但是我该如何规避呢?我找不到避免这种检查的方法,而且static if在C++中还没有.

可以使用SFINAE原则来避免这种情况if吗?

c++ templates

15
推荐指数
4
解决办法
1699
查看次数

C++:char指针指向std :: string转换复制内容吗?

当我转换char*std::string使用构造函数时:

char *ps = "Hello";
std::string str(ps);
Run Code Online (Sandbox Code Playgroud)

我知道std容器在被要求存储时往往会复制值.是复制整个字符串还是仅指针?如果事后我str = "Bye"会改变ps指向"再见"吗?

c++ string constructor stdstring

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

我可以使用C++ 11大括号初始化语法来避免为简单聚合声明普通构造函数吗?

假设我有以下代码:

#include <vector>

struct Foo
{
    int tag = 0;
    std::function<void ()> code;
};

int main()
{
   std::vector<Foo> v;
}
Run Code Online (Sandbox Code Playgroud)

现在我想要Foo使用特定的向量向量添加新项目,tagcode 不是明确创建临时项目.这意味着我必须添加一个构造函数Foo:

struct Foo
{
    inline Foo(int t, std::function<void ()> c): tag(t), code(c) {}

    int tag = 0;
    std::function<void ()> code;
};
Run Code Online (Sandbox Code Playgroud)

现在我可以使用emplace_back:

v.emplace_back(0, [](){});
Run Code Online (Sandbox Code Playgroud)

但是当我不得不再次这样做 - 第100次 - 使用新创建的结构时,我想:我不能使用大括号初始化器吗?像这样:

#include <vector>

struct Foo
{
   int tag = 0;
   std::function<void ()> code;
};

int main()
{
   std::vector<Foo> v;
   v.push_back(Foo{ 0, …
Run Code Online (Sandbox Code Playgroud)

c++ initialization initializer-list c++11 list-initialization

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

模板上下文中的"模糊基类"错误

我有这个功能模板:

template <class TemplateArgument, template<class> class TemplateType>
TemplateArgument f(const TemplateType<TemplateArgument>& arg)
{
    return TemplateArgument();
}
Run Code Online (Sandbox Code Playgroud)

如果这样使用,它无法编译:

struct A {};
template <typename T> struct S {};
template <typename T> struct B : public S<T> {};

struct C : public B<A> {};

int main()
{
    f(C());
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

并且错误消息是:

<source>: In function 'int main()':

<source>:15:10: error: no matching function for call to 'f(C)'

     f(C());

          ^

<source>:2:18: note: candidate: template<class TemplateArgument, template<class> class TemplateType> TemplateArgument f(const TemplateType<TemplateArgument>&)

 TemplateArgument f(const TemplateType<TemplateArgument>& arg)

                  ^ …
Run Code Online (Sandbox Code Playgroud)

c++ templates language-lawyer c++14 c++17

13
推荐指数
1
解决办法
390
查看次数

通过union union访问__m128变量的字节?

考虑这个变量声明:

union {
        struct {
            float x, y, z, padding;
        } components;
        __m128 sse;
    } _data;
Run Code Online (Sandbox Code Playgroud)

我的想法是通过赋值x,y,z领域,执行SSE2计算,并通过读取结果x,y,z.不过,我对它是否合法有些怀疑.我关心的是对齐:MSDN说__m128变量自动对齐到16字节边界,我想知道我的联盟是否可以破坏这种行为.这里还有其他陷阱需要考虑吗?

c++ sse unions

11
推荐指数
1
解决办法
2672
查看次数