小编Vah*_*agn的帖子

SWIG支持静态成员函数的继承

SWIG不会包装派生类的继承的静态函数。如何解决?

这是问题的简单说明。

这是一个简单的C ++头文件:

// file test.hpp
#include <iostream>

class B
{
public:
  static void stat()
  { std::cerr << "=== calling static function B::stat" << std::endl; }

  void nonstat() const
  { std::cerr << "==== calling B::nonstat for some object of B" << std::endl; }
};

class D : public B {};
Run Code Online (Sandbox Code Playgroud)

C ++源文件仅包含头文件:

// file test.cpp
#include "test.hpp"
Run Code Online (Sandbox Code Playgroud)

SWIG接口文件仅包含C ++头文件:

// file test.swig
%module test
%{
#include "test.hpp"
%}

%include "test.hpp"
Run Code Online (Sandbox Code Playgroud)

然后,我以此生成swig包装器代码:

swig -c++ -tcl8 -namespace main.swig
Run Code Online (Sandbox Code Playgroud)

然后我以此创建一个共享库:

g++ -fpic …
Run Code Online (Sandbox Code Playgroud)

c++ inheritance swig tcl static-functions

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

如何从tcl脚本调用bash命令?

Bash命令可从交互式tclsh会话中获得.例如,在tclsh会话中,您可以拥有

% ls
Run Code Online (Sandbox Code Playgroud)

代替

$ exec ls
Run Code Online (Sandbox Code Playgroud)

但是,你不能有一个直接调用bash命令的tcl脚本(即没有exec).

在解释tcl脚本文件时如何让tclsh识别bash命令,就像在交互式会话中一样?

我猜有一些tcl包(或类似的东西),它在启动交互式会话时自动加载,以支持直接调用bash commans.如何在tcl脚本文件中手动加载?

bash interactive tcl exec

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

如何获取MATLAB句柄对象的ID?

当我试图在MATLAB containers.Map中使用MATLAB句柄对象作为键值时,问题出现了.

ld( h1, h2 ) 在句柄对象上定义线性顺序,因此对使用句柄对象作为映射的键值应该没有限制,但是只允许使用整数或字符串类型.

此问题的解决方法可能是检索句柄对象的实际ID(地址)(基本上在ld功能上进行比较).

所以问题是:如何获取句柄对象的ID?


发现可以使用静态成员函数中的持久变量来完成变通方法.

在这种情况下,您应该从基类继承所有类,如下所示.

classdef object < handle
properties ( GetAccess = 'public', SetAccess = 'private' )
    id
end

methods ( Access = 'protected' )
    function obj = object()
        obj.id = object.increment();
    end
end

methods ( Static, Access = 'private' )
    function result = increment()
        persistent stamp;
        if isempty( stamp )
            stamp = 0;
        end
        stamp = stamp + uint32(1);
        result = stamp;
    end …
Run Code Online (Sandbox Code Playgroud)

oop matlab object handle

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

强制派生类在MATLAB中调用基函数?

基类具有函数f.派生类会覆盖函数f.我想为派生类的对象调用基类'f.我怎样才能做到这一点?

这是代码示例.

    classdef base

        methods ( Access = public )
            function this = f( this )
                disp( 'at base::f' );
            end

        end
    end

    classdef derived < base

        methods ( Access = public )
            function this = f( this )
                % HERE I WANT TO CALL base::f
                this@base.f(); % this is an error

                disp( 'at derived::f' );
            end

        end
    end

d = derived();
d.f();
% here the result should be
% at base::f
% at derived::f
Run Code Online (Sandbox Code Playgroud)

oop matlab inheritance virtual-functions

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

带有十六进制数的Tcl表达式?

Tcl expr函数支持以十六进制表示法编写的参数:以操作数开头的操作数0x被视为以十六进制形式写入的整数.

但是返回值expr总是以十进制形式:expr 0xA + 0xA返回20,没有0x14.

有没有办法告诉expr返回十六进制表示?是否有一个Tcl函数将十进制表示转换为十六进制?

hex expression tcl

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

为什么无法推导出 const&amp; 模板参数?

考虑这段代码:

\n\n
constexpr int TEN = 10;\n\ntemplate < const int& >\nstruct Object { };\n\ntemplate < const int& II >\nvoid test(Object<II>) { }\n
Run Code Online (Sandbox Code Playgroud)\n\n

然后调用:

\n\n
test<TEN>(Object<TEN>{}); // passes\ntest(Object<TEN>{}); // FAILS\n
Run Code Online (Sandbox Code Playgroud)\n\n

第二次调用无法编译并显示错误消息:

\n\n
error: no matching function for call to \xe2\x80\x98test(Object<TEN>)\nnote: candidate: template<const int& II> void test(Object<II>)\nnote:   template argument deduction/substitution failed:\nnote:   couldn\'t deduce template parameter \xe2\x80\x98II\xe2\x80\x99\n
Run Code Online (Sandbox Code Playgroud)\n\n

问题是为什么?是否符合标准?

\n\n

更重要的问题是:我该如何解决这个问题?即:如何帮助编译器推导const int&模板参数?

\n\n

而在真正的代码中int我却更复杂literal type,所以我确实需要const&. 因此我不能只是“使用int而不是const int&”。

\n\n

我正在使用(快照),并且选项, …

c++ parameters templates non-type c++11

5
推荐指数
0
解决办法
311
查看次数

std::optional 的不明确运算符重载?

考虑这个代码。

struct Test : public std::optional<int>  { };

Test o1, o2;
o1 == o2;
Run Code Online (Sandbox Code Playgroud)

对于最后一行gcc-7.0.1抱怨error: ambiguous overload指向两个重载来比较一个可选项和一个值。但它不应该只是选择带有两个选项的重载并成功编译代码吗?


编辑 值比较的重载不应该有“守卫”禁止它们为从 std::optional 继承的类型实例化吗?

c++ gcc operator-overloading optional c++17

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

如何在构造std :: vector时放置元素?

我想std::vector用一些元素构造一个元素,这些元素由一些特定的构造函数而不是默认的构造函数构造.换句话说,我想在构造向量时对元素进行处理.我怎样才能做到这一点?

考虑一下:

struct Item
{
    Item(double) {}
    Item(const Item&) = delete;
    Item(Item&&) = delete;
};
std::vector<Item> vv(10, 3.14); // Fails! Tries to copy while I want to emplace.
Run Code Online (Sandbox Code Playgroud)

constructor vector c++11 emplace

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

与lambda尾随返​​回类型不一致

请考虑使用gcc-7.0.0最新快照的代码:

auto lambda1 = [](auto&& id) -> decltype(id == 10) { return id == 10; };
auto lambda2 = [](auto&& id) -> decltype(auto)     { return id == 10; };

static_assert(!std::experimental::is_detected_v<ResultOfT,decltype(lambda1),std::string>);
//static_assert(!std::experimental::is_detected_v<ResultOfT,decltype(lambda2),std::string>);
// This doesn't even compile!?
auto bb = std::experimental::is_detected_v<ResultOfT,decltype(lambda2),std::string>;
Run Code Online (Sandbox Code Playgroud)

哪里ResultOfT只是一个包装std::result_of.

在这个意义上,为什么lambda1lambda2不等同?

按我的理解decltype(auto),在lambda2应刚的缩写形式decltype(id == 10),但实际上它不是,那么是什么原因?

这是GCC中的错误吗?

c++ gcc decltype trailing-return-type c++17

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

std::optional 的平凡默认构造函数

无法std::optional<T>平凡缺省构造

似乎唯一的障碍是engaged标志的初始化,但零初始化不处理这种情况吗?

c++ default-constructor optional c++17

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

如何在本地打开.sql文件?

我有一个.sql文件大小约2 GB.我想在笔记本电脑上本地打开数据库.

为此,我想我必须在笔记本电脑上安装SQL服务器和SQL客户端应用程序.

您能否请我找到有关如何获得所有这些内容的相应安装包和文档(我会欢迎任何有关Windows或Linux的答案)?

我确定答案不是,但是,我仍然可以用MS Access打开.sql文件吗?

以下是.sql文件的前几行

--
-- PostgreSQL database dump
--

SET statement_timeout = 0;
SET client_encoding = 'SQL_ASCII';
SET standard_conforming_strings = off;
SET check_function_bodies = false;
SET client_min_messages = warning;
SET escape_string_warning = off;

SET search_path = public, pg_catalog;

SET default_tablespace = '';

SET default_with_oids = false;
Run Code Online (Sandbox Code Playgroud)

postgresql ms-access database-restore

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