小编was*_*ful的帖子

如何从模板类中键入方法的返回类型?

我有一个模板化的类Helper,看起来像这样:

template< typename Mapper >
class Helper
{
public:

   using mappedType = ... ;

};
Run Code Online (Sandbox Code Playgroud)

我需要mappedType是类中map(const int&)方法返回的Mapper类型.给出Mapper类似以下的有效类型:

class DMapper
{
public:

    double map(const int& val){ ... }
};
Run Code Online (Sandbox Code Playgroud)

Helper<DMapper>::mappedType应该是double.有没有办法在没有实例化的情况下做到这一点Mapper

我得到的最接近的是:

using mappedType = typename std::result_of<
    decltype(&Mapper::map)(Mapper const*, const int&)
>::type;
Run Code Online (Sandbox Code Playgroud)

type在这种情况下没有定义.

编辑:

如果我可以避免使用伪参数int,那就更好了(在我的具体代码中,参数并不那么简单).

c++ types return-type-deduction c++14

18
推荐指数
3
解决办法
1924
查看次数

使用Jekyll检查文件是否存在

我如何使用Jekyll来测试文件的存在?

为了澄清,我想运行一个{% if %}语句来检查是否存在与我所在页面同名的图像文件.

在YAML前面的我的页面上:

----
  reference-design: true
----
Run Code Online (Sandbox Code Playgroud)

在我的布局中:

{% if page.reference-design %}
    {% assign filename = page.path | remove_first: '.html' %}
    <!-- How can I check if file actually exists? -->
    <img src="images/reference_designs/{{ filename }}.png">
{% endif %}
Run Code Online (Sandbox Code Playgroud)

liquid jekyll

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

GitFlow:发布和主分支有什么区别?

我刚刚看了一下这个gitflow备忘单.我不明白这个release分支.

谁能告诉我releasemaster分支之间的区别?

git git-flow

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

如何创建依赖于外部头文件的cmake header-only库?

我有一个具有以下文件结构的项目:

project
 |
 |-------> lib1
 |           |----> lib1.h
 |
 |-------> lib2
 |           |----> lib2.h
 |
 |-------> main.cc
Run Code Online (Sandbox Code Playgroud)

这两个库lib1,并lib2只包含头文件,同时lib2.h包括lib1.h,和main.cc包括lib2.h.

我现在如何为这个项目编写cmake文件?我试图创建一个接口库lib2,但是编译器无法找到lib1.h.以下是我的cmake文件的内容:

lib2的CMakeLists.txt:

add_library(lib2 INTERFACE)
target_sources(lib2 INTERFACE lib2.h)
target_include_directories(lib2 INTERFACE ../lib1/lib1.h)
Run Code Online (Sandbox Code Playgroud)

整个项目的CMakeLists.txt:

add_executable(project main.cc)
target_link_libraries(project lib2)
Run Code Online (Sandbox Code Playgroud)

cmake文件中有什么问题?

c++ cmake

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

将不同类型的参数传递给函数模板

考虑这个模板:

template<typename t>
t add(t a, t b) {
    return a+b;
}
Run Code Online (Sandbox Code Playgroud)

如何传递不同类型的参数,以便返回值为:

  • int如果两个参数都是类型int.

  • float如果其中一个参数是类型的float.

  • float如果两个参数都是类型float.

我也尝试过为模板设置多个参数:

template<typename t, typename c>
Run Code Online (Sandbox Code Playgroud)

使用它们作为函数参数,因此它们可以是不同的(t add(t a, c b))但是我无法解决的问题是如何根据返回类型更改函数类型(int,float,double等)?

c++ templates function

12
推荐指数
3
解决办法
1933
查看次数

使用nullptr_t时,为什么会出现"参数设置但未使用"警告?

我有一个自定义类实现operator==nullptr.

这是我的代码愚蠢到一个简单的例子:

#include <cstdint>
#include <iostream>

class C {
private:
    void *v = nullptr;

public:
    explicit C(void *ptr) : v(ptr) { }

    bool operator==(std::nullptr_t n) const {
        return this->v == n;
    }
};

int main()
{
    uint32_t x = 0;
    C c(&x);
    std::cout << (c == nullptr ? "yes" : "no") << std::endl;

    C c2(nullptr);
    std::cout << (c2 == nullptr ? "yes" : "no") << std::endl;


    return 0;
}
Run Code Online (Sandbox Code Playgroud)

代码按预期工作,但g ++(版本6.2.1)给出了以下警告:

[Timur@Timur-Zenbook misc]$ g++ aaa.cpp -o …
Run Code Online (Sandbox Code Playgroud)

c++ warnings g++ nullptr c++11

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

使用CMake添加仅限标头的依赖项

我有一个简单的项目,需要三个只有头的库才能编译:websocketpp,spdlognlohmann/json.

项目结构如下所示:

??? src
    ??? app
    ?   ??? CMakeLists.txt
    ?   ??? src
    ?   ??? test
    ??? CMakeLists.txt
    ??? core
    ?   ??? CMakeLists.txt
    ?   ??? include
    ?   ??? src
    ?   ??? test
    ??? vendor
        ??? install.cmake
        ??? nlohmann_json
        ??? spdlog
        ??? websocketpp
Run Code Online (Sandbox Code Playgroud)

根CMakeLists.txt如下:

cmake_minimum_required(VERSION 3.6.1 FATAL_ERROR)

..

# External 3rd party libs that we include

include(vendor/install.cmake)

add_subdirectory(core)
add_subdirectory(app)
Run Code Online (Sandbox Code Playgroud)

这个想法基本上是每个子目录都是一个库(例如core),并app"聚合"所有子目录.每个库(例如core)都是这样构建的(core/CMakeLists.txt):

project(foo-core VERSION 0.1 LANGUAGES CXX)
add_library(foo-core
  src/foobar/foobar.cc
  src/foobaz/baz.cc) …
Run Code Online (Sandbox Code Playgroud)

c++ cmake spdlog nlohmann-json

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

std :: set,lower_bound和upper_bound如何工作?

我有这么简单的代码:

#include <iostream>
#include <set>

using std::set;

int main(int argc, char argv) {
   set<int> myset;
   set<int>::iterator it_l, it_u;
   myset.insert(10);
   it_l = myset.lower_bound(11);
   it_u = myset.upper_bound(9);

   std::cout << *it_l << " " << *it_u << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

这将打印1作为11的下限,10作为9的上限.

我不明白为什么打印1.我希望使用这两种方法来获得给定上限/下限的一系列值.

c++ containers set

9
推荐指数
1
解决办法
8033
查看次数

检查在使用CMAKE的编译器中是否启用了c ++ 11功能

我正在用CMake开发一个项目.我的代码包含constexprVisual Studio 2015中允许但在Visual Studio 2013中不允许的方法.

如何检查CMakeLists.txt指定编译器是否支持该功能?我在CMake文档中看到过CMAKE_CXX_KNOWN_FEATURES,但我不明白如何使用它.

c++ cmake c++11

9
推荐指数
1
解决办法
4452
查看次数

删除CSS Grid中的大差距

我使用css网格进行了设计,这给了我行间意想不到的空间.我用以下代码复制了我的问题:

main {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  grid-column-gap: 10px;
  grid-row-gap: 10px;
}
article {
  background: red;
}
.item1 {
  height: 30px;
  grid-column-start: 1;
  grid-column-end: 2;
  grid-row-start: 1;
  grid-row-end: 2;
}
.item2 {
  height: 100px;
  grid-column-start: 1;
  grid-column-end: 2;
  grid-row-start: 2;
  grid-row-end: 3;
}
.item3 {
  height: 300px;
  grid-column-start: 1;
  grid-column-end: 2;
  grid-row-start: 3;
  grid-row-end: 4;
}
.item4 {
  height: 490px;
  grid-column-start: 2;
  grid-column-end: 3;
  grid-row-start: 1;
  grid-row-end: 5;
}
.item5 {
  height: 160px;
  grid-column-start: 1;
  grid-column-end: 2;
  grid-row-start: 4; …
Run Code Online (Sandbox Code Playgroud)

html css html5 css3 css-grid

9
推荐指数
1
解决办法
1151
查看次数