小编Ske*_*een的帖子

alignas说明符与__attribute __(对齐),c ++ 11

我目前正在使用C++ 11开发OS内核,我遇到了一个问题,我似乎找不到自己的答案.

目前我正在使用编译器特定属性(例如gcc __attribute__(aligned))来调整我的分页结构,但是我想要使用C++ 11 alignas说明符,而在Clang ++上这不是问题,因为它很乐意接受4096对齐作为参数对齐,但G ++没有!

所以首先alignas specifier,它和gcc 之间的主要区别__attribute__(aligned)显然都确保了对特定值的对齐,但是gcc中的alignas说明符似乎有128的限制,而属性似乎几乎是无限的,为什么会这样?

另外为什么不能将const整数传递给alignas说明符?

c++ gcc alignment clang c++11

10
推荐指数
1
解决办法
6340
查看次数

结合枚举c ++

在我的项目中,我有几个类似的枚举声明;

enum Comparison
{
    LT,     // "<"
    GT,     // ">"
    EQ,     // "=="
    LTEQ,   // "<="
    GTEQ,   // ">="
    NEQ     // "!="
};
enum Arithmetic
{
    ADD,    // "+"
    SUB,    // "-"
    MUL,    // "*"
    DIV,    // "/"
    MOD,    // "%"
};
Run Code Online (Sandbox Code Playgroud)

我想将其中的几个组合成一个单独的组合枚举,这样;

  • 所有元素(来自子枚举)都存在于组合枚举中.
  • 所有元素都具有独特的价值(显然).
  • 所有元素在组合枚举和原始元素中具有一致的值.

像这样:

enum Comparison
{
    LT,     // "<"
    GT,     // ">"
    EQ,     // "=="
    LTEQ,   // "<="
    GTEQ,   // ">="
    NEQ     // "!="

    ADD,    // "+"
    SUB,    // "-"
    MUL,    // "*"
    DIV,    // "/" …
Run Code Online (Sandbox Code Playgroud)

c++ enums c++11

10
推荐指数
2
解决办法
7193
查看次数

MySQL自己的外键

我正在尝试在MySQL中创建一个自引用表,但是我似乎无法在表本身上创建外键,我收到了MySQL错误:

Error Code: 1005. Can't create table 'biological classification' (errno: 150)
Run Code Online (Sandbox Code Playgroud)

这是我的代码:

# Table creation
DROP TABLE IF EXISTS `biological classification`;
CREATE TABLE `biological classification` (
  `idBC` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `idParent` int(11) DEFAULT NULL,
  `type` varchar(45) DEFAULT NULL,
  `value` varchar(45) DEFAULT NULL,
  PRIMARY KEY (`idBC`),
  UNIQUE KEY `idnew_table_UNIQUE` (`idBC`),
  CONSTRAINT `SelfKey` FOREIGN KEY (`idParent`) REFERENCES `biological classification` (`idBC`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB AUTO_INCREMENT=20 DEFAULT CHARSET=latin1 COMMENT='A table that contains the Biological Classification …
Run Code Online (Sandbox Code Playgroud)

mysql foreign-keys self-reference

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

谁在java中实现了OS接口?

我的问题主要是关于标准,但是关于具体实现如何处理该问题的输入也是受欢迎的.所以没有进一步的重做,我的问题是;

  • 谁负责Java中的操作系统接口?
    • Java虚拟机?
    • 还是Java类库?

这通常是如何通过Java Native Interface实现的?

例; 我正在使用java.io.FileReader读取文件.当调用read这个对象时,JVM显然会在JCL中的正确类文件中调用这个函数,但是这个代码到底依赖于JVM来调用,例如posix read函数? - 或者类文件是否会通过使用JNI自行完成?(假设read必须完成,即文件不在缓存/内存中)

java java-native-interface standards interface standard-library

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

boost :: optional to bool,在boost :: spirit :: qi语法中

在我的boost::spirit语法中,我有以下片段;

implicit_method_declaration = (-(qi::token(ABSTRACT)) >> ...)
Run Code Online (Sandbox Code Playgroud)

该类型-(qi::token(ABSTRACT)boost::optional<boost::iterator_range<std::string::iterator>>不过我只使用此结构来检查,如果抽象关键字,其实是存在,那就是,我宁愿-(qi::token(ABSTRACT)有型bool与价值boost::optional<...> operator bool() const.

我将如何实现这一目标?

c++ boost-spirit boost-spirit-qi

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

从lambda获取捕获的变量?

我想知道,如果有办法获得lambda的捕获变量的类型/值? - 使用场景将是相似的;

int a = 5;
auto lamb = [a](){ return a; };
static_assert(std::is_same<typename get_capture_type<0>(lamb)::type, int>::value, "");
assert(get_capture_value<0>(lamb) == 5)
Run Code Online (Sandbox Code Playgroud)

注意:get_capture_*<N>(lambda)显然应该导致编译错误N > #captured_variables.

我需要的只是一种以某种方式访问​​捕获的方法,如果可能的话.也就是说,我可以自己做模板元编程.

c++ lambda c++11 c++14

7
推荐指数
2
解决办法
426
查看次数

将模板html中的<link>标记重构为styleUrls

我正在尝试重构一个Component,它将其html模板中的样式表链接到使用styleUrls.

链接的模板具有相似的含义;

<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.4.0/css/font-awesome.min.css">
Run Code Online (Sandbox Code Playgroud)

我把它重构成了;

styleUrls: [
    'https://maxcdn.bootstrapcdn.com/font-awesome/4.4.0/css/font-awesome.min.css'
],
encapsulation: ViewEncapsulation.None
Run Code Online (Sandbox Code Playgroud)

我可以确认样式表已加载,但是它被加载为内联样式而不是通过链接标记,因为这样引用为;

src:url('../fonts/fontawesome-webfont.eot?v=4.4.0');
Run Code Online (Sandbox Code Playgroud)

不要指向;

https://maxcdn.bootstrapcdn.com/font-awesome/4.4.0/fonts/fontawesome-webfont.eot?v=4.4.0
Run Code Online (Sandbox Code Playgroud)

而是为了;

http://localhost:9000/fonts/fontawesome-webfont.eot?v=4.4.0
Run Code Online (Sandbox Code Playgroud)

我将如何重构html模板以使用styleUrls,同时保留相对引用?

css angular

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

有限制的三边形?

我需要帮助解决一个问题,问题出现在我的小机器人实验之一,基本的想法是,每个小机器人都能够近似距离,从他们自己到物体,然而近似我得到的方式太粗糙了,我希望能够更准确地计算出更多东西.

所以:
输入:顶点列表(v_1, v_2, ... v_n),顶点v_*(机器人)
输出:未知顶点v_*(对象)的坐标

每个顶点v_1v_n的是公知的(通过调用提供的坐标getX()getY()在顶点),并且其可能获得的大致范围内,以v_*通过调用; getApproximateDistance(v_*),函数getApproximateDistance()返回两个变量变量,即; minDistancemaxDistance. - 实际距离介于两者之间.

所以我一直试图获得坐标v_*,是使用trilateration,但我似乎无法找到一个用限制(下限和上限)进行三边测量的公式,所以这就是我真正想要的(在数学方面不够好,自己搞清楚).

注意:是三角测量的方式而不是?
注意:我可能想知道一种方法,性能/准确性权衡.

数据示例:

[Vertex . `getX()` . `getY()` . `minDistance` . `maxDistance`]
[`v_1`  .  2       .  2       .  0.5          .  1  ]
[`v_2`  .  1       .  2       .  0.3          .  1  ]
[`v_3`  .  1.5     .  1       .  0.3          .  0.5] …
Run Code Online (Sandbox Code Playgroud)

math distance triangulation approximation trilateration

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

将set-theory应用于C++ 11可变参数模板

假设我有两个可变参数模板; typename... T, typename... U,我怎么去寻找他们的;

  1. 级联
  2. 最大公共子序列
  3. 最大公共子序列的逆

所以根据我的理解,连接很简单; (t..., u...),但是如何找到两者的最大公共子序列呢? - 它甚至可能吗?

c++ templates variadic-templates c++11

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

编译器错误,还是非标准代码? - lambda中的变异模板捕获

我有以下C++ 11代码;

template<typename... T>
int g(T... t)
{
    return 0;
}

template<class... Args>
void f(Args... args)
{
    auto lm = [&, args...] { return g(args...); };
    lm();
}

int main()
{
    f(2, 5, 7);
}
Run Code Online (Sandbox Code Playgroud)

据我所知,我相信它是有效的C++ 11; 标准第5.1.2.23节;

捕获后跟省略号是包扩展(14.5.3).[例如:

template<class... Args> void f(Args... args) {
    auto lm = [&, args...] { return g(args...); }; lm();
}
Run Code Online (Sandbox Code Playgroud)

- 结束例子]

然而,虽然Clang ++编译得很好,但G ++提供了这个错误;

main.cpp: In function 'void f(Args ...)':
main.cpp:10:23: error: expected ',' before '...' token
     auto lm = [&, args...] { …
Run Code Online (Sandbox Code Playgroud)

c++ lambda compiler-bug variadic-templates c++11

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