小编Gas*_*sim的帖子

跨dll使用静态类变量/函数

我需要帮助访问跨 DLL/主程序的全局函数。我有一个班级基地

基数

#ifdef MAIN_DLL
#define DECLSPEC __declspec(dllexport)
#else
#define DECLSPEC __declspec(dllimport)
#endif


class Base {
private:
    DECLSPEC static Filesystem * filesystem;
    DECLSPEC static Logger * logger;
    DECLSPEC static System * system;

public:

    static void setFilesystem(Filesystem * filesystem_);
    static void setApplication(Application * application_);
    static void setLogger(Logger * logger_);
    static void setSystem(System * system_);

    static Filesystem * fs() { return filesystem; }
    static Logger * log() { return logger; }
    static System * sys() { return system; }

};
Run Code Online (Sandbox Code Playgroud)

main.cpp(主应用程序)(此处预定义了 MAIN_DLL) …

c++ dll static shared-libraries

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

如何使用variadic size_t模板将多个std :: tuple_element作为函数参数进行协调

我想创建一个函数,通过一次调用更改元组内的多个值.

template<class... Args>
class EventN {
public:
  std::tuple<Args...> mArgs;

  EventN(Args... args) : mArgs(args) {}
  EventN() {}

  template<size_t N> void set(typename std::tuple_element<N-1,Tuple>::type value) {
     std::get<N-1>(mArgs) = value; //I use N-1, to start from '1'
  }

};
Run Code Online (Sandbox Code Playgroud)

上面的set函数按我的预期工作:

auto event = new EventN<String,int>();
event->set<1>("testEvent");
event->set<2>(12);
Run Code Online (Sandbox Code Playgroud)

现在,我想将功能扩展到:

event->set<1,2>("testEvent", 12);
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?有没有办法制作std::tuple_element<N-1,Tuple>::type变量?

c++ variadic-templates c++11

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

symfony如何“通配符一切”路线

我想通过以下方式在 Symfony 中创建一条路由:/admin/_api/*和/admin/*。所以,总的来说,我想要一个如下的配置:

/admin/_api/users
/admin/_api/posts
/admin/_api/comments
/admin/_api/* -> (AdminBundle:Error:api)
/admin/*  -> (AdminBundle:Error:html)
Run Code Online (Sandbox Code Playgroud)

根据给定的配置,如果用户访问/admin/_api/test,路由器将调度到ErrorController::apiAction。如果用户访问,/admin/users它将分派到ErrorController:htmlAction。

有办法实现这一点吗?

php routes symfony

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

如何在Jekyll中更改路径和URL?

我是Jekyll的新手,我无法找到更改以下内容的配置:

  1. 我使用Jekyll构建了一个基本的Jekyll站点jekyll new .并运行jekyll serve以学习和构建布局.基本测试网站为我提供了以下帖子:/jekyll/update/2016/01/30/welcome-to-jekyll.html.这样的URL是因为我正在运行jekyll serve而不是jekyll build吗?我想从URL路径中删除jekyll/update,因此我的帖子的最终URL如下所示:/2016/01/30/welcome-to-jekyll.html.

  2. 我希望我的页面存储在一个单独的目录_pages而不是根目录中.我怎样才能做到这一点?

  3. 有没有办法预先添加从特定目录加载的文件的路径?例如,我想创建一个/ _projects目录.然后使用以下永久链接添加文件:/ prj-test1,/ prj-test2,/ prj-test3.编译时,我想获得以下URL:/ projects/prj-test1,/ projects/prj-test2,/ projects/prj-test3.这可能吗?

jekyll

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

docker 容器 IP 在重启时会发生变化吗?

我是 docker 的新手,我一直在单个服务器中对我的所有应用程序进行 dockerizing。到目前为止,一切都很好并且工作正常。然而,我不明白一件事。我对所有内容都使用 docker-compose(我还没有为我的项目创建 dockerfile)并且 docker ports-compose 中有这个属性。如果我写这样的东西:

ports:
    8085:80
Run Code Online (Sandbox Code Playgroud)

它将侦听 0.0.0.0:8085,这意味着外部世界可以访问我的服务器。经过一些讨论和 google-ing,我发现我可以在我的 docker 网桥网络中获取 IP 地址并轻松进行端口映射:

ports:
    172.17.0.1:8085:80
Run Code Online (Sandbox Code Playgroud)

这将仅在 172.17.0.1:8085 上侦听,这很好,因为它仅在内部侦听并且我的 nginx 将流量代理到必要的端口。(例如proxy_pass http://172.17.0.1:8085)。在进一步了解 docker 并了解它们的工作原理后,我意识到所有这些容器都有自己的 IP 地址,端口仅暴露给这些地址。例如,我的一个“web”容器的 IPv4 地址为 172.17.0.10,并且暴露了端口 80。如果我docker inspect在这些容器之一上执行操作,我将看到容器的 IP 地址。

现在,我想在我的 nginx 中使用这些 IP 地址。而不是proxy_pass http://172.17.0.1:8085,我想做http://172.17.0.10。我个人认为这是一个非常优雅的界面,但有一点让我担心。如果我重新启动机器会发生什么?所有容器都将以某种顺序启动。如果我有 5 个 Web 容器并且它们以随机顺序启动,我可以确定这些容器的 IP 是相同的吗?或者他们会改变吗?我应该总是ports在 docker-compose 中使用以供 nginx 使用吗?如果是,我如何为每个容器使用不同的 IP 而不是具有相同 IP 的不同端口?如果我创建另一个 docker 网络接口(假设在子网 172.17.1.0 中),并将该接口的不同 IP 分配给公开的“公共”端口,是否可以?我的意思是基本上172.17.1.1:80:80在一个容器中使用,172.17.1.2:80:80 在另一个等

nginx docker docker-compose docker-networking

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

django测试RequestFactory无法获取路由参数

我有一个我不知道如何使其工作的问题。

urls.py:

urlpatterns = [
    url(r'athletes/search$', SearchAthletes.as_view()),
    url(r'athletes/([0-9]+)$', ViewAthlete.as_view())
]
Run Code Online (Sandbox Code Playgroud)

views.py:

class ViewAthlete(APIView):

    def get(self, request, id, format=None):
        athlete = Athlete.objects.get(id=id)
        serializer = AthleteSerializer(athlete)
        return Response(serializer.data)
Run Code Online (Sandbox Code Playgroud)

test.py:

def test_view_athlete(self):
    tmp = Athlete.objects.order_by('?')[0]

    request = self.factory.get('/_api/v1/athletes/' + str(tmp.id))
    request.user = AnonymousUser()

    response = ViewAthlete.as_view()(request)
    self.assertEquals(response.data.id, tmp.id)
Run Code Online (Sandbox Code Playgroud)

我不断收到以下错误:

追溯(最近一次通话最后一次):文件“ /tests.py”,第44行,在test_view_athlete中,响应= ViewAthlete.as_view()(request)

文件“ /venv/lib/python3.5/site-packages/django/views/decorators/csrf.py”,第58行,在wrapped_view中返回view_func(* args,** kwargs)

文件“ /venv/lib/python3.5/site-packages/django/views/generic/base.py”,第68行,在视图中返回self.dispatch(request,* args,** kwargs)

文件“ /venv/lib/python3.5/site-packages/rest_framework/views.py”,行474,调度响应= self.handle_exception(exc)

文件“ /venv/lib/python3.5/site-packages/rest_framework/views.py”,行471,在调度响应= handler(request,* args,** kwargs)中TypeError:get()缺少1个必需的位置参数: 'ID'

据我了解,问题在于没有id参数传递给视图类的get函数ViewAthelete。这是什么原因呢?在开发环境(而非测试)中,它显示数据,但是测试环境无法识别路由中的参数。

python django

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

如何对UITableView进行单元测试?

我正在尝试单元测试UITableView,但我不知道该怎么做.我有一个视图控制器,其中有一个表视图.每个原型单元都有一个自定义表视图单元类,其上连接有插座.

现在,我想分别测试这两个组件.首先,我想通过单独创建原型单元来测试表视图单元格内的数据是否正确.其次,我想用随机数据填充我的表视图并测试对象是否正确等.我怎样才能做到这两个?

为了测试单元本身,我不知道如何单独创建单元并通过向其发送数据来检查它.因此,我的自定义类具有将数据设置为单元格的小功能,而不是直接将数据分配给标签,按钮,图像.我想测试那些功能.但是,如果我没有渲染它,我无法检查它.

为了测试组件,我的问题是不同的,我想改变即将发生的数据.因此,我不想从API中读取数据,而是想要正常读取它,但我不知道如何更改viewDidLoad为使用本地对象而不是网络对象.

unit-testing uitableview ios swift

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

Gitlab CI 如何在构建 docker 镜像之前运行测试

我有一个基于 Python 的存储库,我正在尝试设置 Gitlab CI 以使用 Dockerfile 构建 Docker 映像并将该映像推送到 Gitlab 的注册表。

在构建 Docker 映像并将其部署到注册表之前,我想使用 Python 运行单元测试。这是我当前仅进行测试的 gitlab-ci.yml 文件:

image: python:3.7-slim
before_script:
  - pip3 install -r requirements.txt

test:
  variables:
    DJANGO_SECRET_KEY: some-key-here
  script:
  - python manage.py test

build:
  DO NOT KNOW HOW TO DO IT
Run Code Online (Sandbox Code Playgroud)

我正在检查 Gitlab 网站上的一些模板,并找到了一个适用于 Docker 的模板:

# This file is a template, and might need editing before it works on your project.
# Official docker image.
image: docker:latest

services:
  - docker:dind

before_script:
  - docker login -u "$CI_REGISTRY_USER" …
Run Code Online (Sandbox Code Playgroud)

gitlab docker gitlab-ci

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

擦除期间std容器迭代器失效

可能重复:
向量擦除迭代
器调用erase()后std :: map :: iterator问题


我对我的一段代码感到担忧.我有组件和存储组件的对象.问题是在组件可以告知从对象中删除组件的更新期间.但它从另一个功能调用.

void Object::update() { //using std::map here
   for(ComponentMap::iterator i = components.begin(); i != components.end(); ++i) {
      (*i).second->update();
   }
}

void HealthComponent::update() {
   if(health <= 0) object->removeComponent("AliveComponent"); //this is wrong logic. but its just an example :D
}

void Object::removeComponent(string component) {

  ComponentMap::iterator i = components.find(component);
  if(i == components.end()) return;

  components.erase(i);

}
Run Code Online (Sandbox Code Playgroud)

并假设我有很多组件 - 健康,活着,图形,物理,输入等.

我试过这样的东西(带有一些测试组件)并且在更新期间没有错误.但我真的很担心.它可以在将来给我一个错误吗?如果是的话,如何解决?

提前谢谢,
Gasim

c++ g++ std composite-component

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

如何转换 lambda 函数参数并将其存储在 std::function 中

我有一个存储在向量中的函数列表:

std::vector<std::function<void(uint32_t)>> mFunctions;
Run Code Online (Sandbox Code Playgroud)

我想添加一个函数作为公共 API,它接受不同的参数,但将其转换为 uint32_t:

enum class MyHandle : uint32_t { Null = 0; };


void addFunction(std::function<void(MyHandle)> &&fn) {
  mFunctions.push_back(fn);
}
Run Code Online (Sandbox Code Playgroud)

我怎样才能实现这个目标?

c++ lambda c++11

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