小编mkl*_*uwe的帖子

“sizeof”对不完整类型错误的意外无效应用

在下面的代码中

#include <type_traits>

template< typename T >
struct Allocator {
    using element_type = std::aligned_storage_t< sizeof( T ) >;
};

template< typename T >
struct MPT {
    static Allocator< MPT > allocator;
};

using RV = MPT< double >;

template<>
Allocator< RV > RV::allocator = {};
Run Code Online (Sandbox Code Playgroud)

g++ 产生以下错误:“sizeof”对不完整类型“MPT”的无效应用。

我尝试使用 Compiler Explorer ( https://godbolt.org/z/ran4or )使用 g++ 10.2 。Clang 和 MSVC 不会抱怨(参见https://godbolt.org/z/nsE5Yjhttps://godbolt.org/z/7c7n4e)。

这真的是不完整类型的例子吗?哪个编译器在这里是正确的?

c++ templates g++ language-lawyer

10
推荐指数
0
解决办法
135
查看次数

如何在 Typescript 中定义和调用通用函数参数?

Function.prototype.call我正在寻找与 Typescript等效的单参数类型安全。

这不起作用,因为F缺少适当的约束(也许):

function call<F,A>(f: F, arg: A) {
  return f(arg);
}
Run Code Online (Sandbox Code Playgroud)

因此,Typescript 抱怨“这个表达式不可调用。类型‘未知’没有调用签名。”

我如何使F可调用?我如何设法call获得返回类型F

generics typescript

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

获取char中的位数

如何获取类型中的位数char

我知道CHAR_BITclimits.这被描述为»宏产生用于表示char类型对象的位数的最大值.«在Dikumware的C Reference中.我明白这意味着a中的位数char,不是吗?

我能以std::numeric_limits某种方式获得相同的结果吗?std::numeric_limits<char>::digits返回7正确但不幸的是,因为此值尊重此位的8位字符的签名...

c++

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

Windows控制台上的UTF-8输出

以下代码显示了我的计算机上的意外行为(在Windows XP和Windows 7上的VS 2012上使用Visual C++ 2008 SP1进行了测试):

#include <iostream>
#include "Windows.h"

int main() {
    SetConsoleOutputCP( CP_UTF8 );
    std::cout << "\xc3\xbc";
    int fail = std::cout.fail() ? '1': '0';
    fputc( fail, stdout );
    fputs( "\xc3\xbc", stdout );
}
Run Code Online (Sandbox Code Playgroud)

我简单编译了cl /EHsc test.cpp.

Windows XP:控制台窗口中的输出 ü0ü(转换为代码页1252,最初显示默认代码页中的一些线条图,可能是437).当我更改控制台窗口的设置以使用"Lucida Console"字符集并再次运行我的test.exe时,输出更改为,这意味着

  • ü可以使用fputsUTF-8编码来编写字符C3 BC
  • std::cout 因任何原因都不起作用
  • failbit尝试写字符后,流设置

Windows 7:使用Consolas输出??0ü.更有趣.可能写入正确的字节(至少在将输出重定向到文件时)并且流状态正常,但这两个字节被写为单独的字符).

我试图在"Microsoft Connect"(见这里)上提出这个问题,但是MS并没有太大的帮助.你可以在这里看一下 以前曾经问过类似的东西.

你能重现这个问题吗?

我究竟做错了什么?不应该std::coutfputs有相同的效果?

解决:(排序)继mike.dld的想法,我实现了一个std::stringbuf …

c++ console windows-xp utf-8 visual-studio-2008

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

实现缺少新约束的通用接口

请考虑以下界面:

public interface IFoo
{
    M Bar<M>();
}
Run Code Online (Sandbox Code Playgroud)

试着用它来实现

class Foo : IFoo
{
    public M Bar<M>()
    {
        return new M();
    }
}
Run Code Online (Sandbox Code Playgroud)

不起作用,编译器抱怨M缺少一个new()约束.

当我添加约束时

class Foo : IFoo
{
    public M Bar<M>() where M : new()
    {
        return new M();
    }
}
Run Code Online (Sandbox Code Playgroud)

这仍然不能解决问题,因为Foo.Bar现在的约束与接口方法的约束不匹配(而且我无法改变它).

编译器错误CS0425文档

要避免此错误,请确保两个声明中的where子句相同,或明确实现接口.

如果"明确地实现接口"是解决方案:我该怎么做?

c# generics interface

6
推荐指数
2
解决办法
501
查看次数

将向量解包到函数参数中

我有一个有四个参数的函数,例如

fun <- function( x, a, b, c ) {
    sin( x * a ) * exp( -x * b ) + x * c
}
Run Code Online (Sandbox Code Playgroud)

我想将其转换为一个具有作为向量提供的三个参数的函数,修复第一个(df$X本例中的某些参数)。以下显然有效:

fx <- function( args ) {
    fun( df$X, args[ 1 ], args[ 2 ], args[ 3 ] )
}
Run Code Online (Sandbox Code Playgroud)

如何将此过程包装到具有任意数量尾随函数参数的函数中,并返回上面的函数fx?伪代码:

fixVector <- function( f, vec ) {
    function( args ) {
        f( vec, magic_unpack( args ) )
    }
}
fx <- fixVector( fun, df$X )

fx <- …
Run Code Online (Sandbox Code Playgroud)

functional-programming r higher-order-functions

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

Lua 中的类,它是如何工作的

我是 Lua 的新手,我正在尝试理解它的 OO 部分,例如:

lkw = {}
lkw.la= 0

function lkw:func(ge)
    self.la = self.la + ge
end

function lkw:new()
    local res = {}
    setmetatable(res, self)
    self.__index = self
    return res
end

mylkw = lkw:new()
Run Code Online (Sandbox Code Playgroud)

在此示例中,“类”lkw 可以使用 new 创建对象,但是 和 是什么self意思indexself应该像在 java/C++ 中一样考虑this,索引是什么?

lua

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

在脚本之间通过引用传递参数

http://ss64.com/nt/syntax-args.html中的“通过引用传递”文章提到了以下内容:

除了在命令行上传递数字或字符串值外,还可以传递变量名,然后使用该变量在脚本或子例程之间传输数据。

但是我该怎么办呢?当我设置变量的值并传递其名称时

set parm=42
call sub.bat parm
Run Code Online (Sandbox Code Playgroud)

我如何使用它sub.bat

cmd batch-file

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

在简短描述中加点

我得到了这个示例代码。我想在我的简短评论中加一个点。

const int myVar = 1;   //!< Doxygen very long brief\.
                       //!  Brief sentence two.
Run Code Online (Sandbox Code Playgroud)

我按照 doxygen 手册中的说明转义了点。这是行不通的。第一行很简短,第二行很详细。这是一个错误吗?

注意:MULTILINE_CPP_IS_BRIEF并且QT_AUTOBRIEFYES!我使用最新版本(1.8.9.1)。

doxygen

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