小编Ale*_*der的帖子

如何在头文件中使用用户定义的文字?

我在以下位置定义了以下用户定义的文字MyLiteral.h:

namespace my_literals {
    constexpr uint64_t operator"" _nanoseconds(unsigned long long int value) {
        return value*1000;
    }
}
Run Code Online (Sandbox Code Playgroud)

现在我可以在另一个标题中使用运算符SomeComponent.h:

using namespace my_literals;
namespace foo {
    constexpr uint64_t timeout = 10_nanoseconds;
}
Run Code Online (Sandbox Code Playgroud)

但是,我不想污染范围using namespace my_literals,因为这会为*.cpp包含的所有文件提供文字定义SomeComponent.h.

我怎么能避免这个?在g ++中constexpr uint64_t timeout = my_literals::10_nanoseconds;给出数字常量之前的预期unqualified-id.

c++ user-defined-literals constexpr c++11 c++14

11
推荐指数
2
解决办法
899
查看次数

隐藏服务实现的最佳实践

我想隐藏API用户的服务(接口)的实现(具体类).该实现由使用Java API ServiceLoader机制的工厂提供给用户.此Loader要求实现类具有公共可见性.只要实现隐藏在用户不直接依赖的不同JAR(除了API JAR之外),就可以了.

但是,为了便于分发,使用默认实现的JAR内容将打包到API JAR中.因此,用户有效地依赖于此预先打包的JAR,其中默认实现类可用于公共可见性.没有什么能阻止人们直接实例化实现.我不希望那是可能的.

我的坏主意:

  • 实现自己的ServiceLoader版本,允许加载包私有实现(顺便说一下,为什么Java API ServiceLoader不允许这样做?)
  • 发布单独的API和实现JAR

您认为正确的方法是什么?妥协吗?

使用OSGi或其他重型机械是不可能的.

java design-patterns

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

JNI签名代码分析

有没有静态代码分析工具可以发现 JNI(方法)签名字符串中的错误?例如,以下代码在语法上不正确(完全限定类名后缺少分号):

(*env)->GetMethodID(env, someClassId, "aMethod","(ILfoo/bar/TheClass)V");
Run Code Online (Sandbox Code Playgroud)

编辑:代码分析工具不需要检查 foo/bar/TheClass 是否存在,而只需根据 JNI 规范检查字符串的语法是否有效。

这个问题的背景是,上面的代码触发了分段错误。这始终是一种烦人的调试情况,但在这种情况下静态分析应该非常容易,可以节省大量时间。

c java java-native-interface code-analysis

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

是移位std :: bitset <N>多于N位置未定义的行为?

如果计数大于类型的宽度,如右移未定义行为中所讨论的那样如果位移数超过有效操作数大小,则移位值是不确定的.

因此,在下面,值bar是未定义的:

uint32_t foo = 123;
uint32_t bar = (foo >> 33);
Run Code Online (Sandbox Code Playgroud)

这种轮班操作是否定义明确std::bitset?如:

std::bitset<32> foo(123);
std::bitset<32> bar(foo >> 33);
Run Code Online (Sandbox Code Playgroud)

我可以在哪个官方文件中找到这样的信息?

该案例未在cppreference上明确说明(https://en.cppreference.com/w/cpp/utility/bitset/operator_ltltgtgt).

c++ bit-shift language-lawyer c++11 c++14

4
推荐指数
1
解决办法
110
查看次数