小编Mar*_*rry的帖子

C++ 可变参数模板 - 限制参数数量

我有一个带有 set 函数的可变参数模板类,它填充内部数组:

template <size_t Dim>
class Vector
{
public:

    void SetValueTemplate(size_t index)
    {
        return;
    }

    template <typename X0, typename ...Xn>
    void SetValueTemplate(size_t index, X0 x0, Xn... xn)
    {
        val[index] = x0;
        SetCenterValueTemplate(index + 1, xn...);
    }

    template <typename ...X0>
    void SetValue(X0... t0)
    {
        SetValueTemplate(0, t0...);
    }

private:
    double val[Dim];
};
Run Code Online (Sandbox Code Playgroud)

问题是,我可以称之为

Vector<3> v;
v.SetValue(0, 1, 2, 4, 5);
Run Code Online (Sandbox Code Playgroud)

并且它编译正确。我可以限制它不编译吗?我可以使用static_assert,但是没有它也可以吗?

c++ templates variadic-templates c++11

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

Swift - C API 桥接器 - 如何处理空指针

在 Swift 中,我使用 C API 返回带有字符数组的结构(包含 UTF8 空终止字符串或空值)。

struct TextStruct {
   char * text;
   //other data
}
Run Code Online (Sandbox Code Playgroud)

我用:

let text: String = String(cString: data.text)
Run Code Online (Sandbox Code Playgroud)

这有效,但是,当data.textis 时nullptr,这会失败

fatal error: unexpectedly found nil while unwrapping an Optional value
Run Code Online (Sandbox Code Playgroud)

是否有任何解决方法,或者我必须data.text在使用cStringctor之前手动检查?

c optional swift

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

git - 无法推送到存储库 - 哈希图错误

当我尝试推送到存储库时,我收到此消息

BUG: remote.c:236: hashmap_put overwrote entry after hashmap_get returned NULL
Run Code Online (Sandbox Code Playgroud)

知道出了什么问题吗?谷歌什么也没显示...

当我尝试推送到同一服务器上的另一个存储库时,它工作正常。问题仅出在一个存储库上。

本地Git版本:2.36.0.windows.1

服务器Git版本:2.19.2

git

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

整数坐标的多边形压缩

我在栅格中有多边形,带有"signed int"2D坐标.多边形的顶点按顺时针方向排列.

我想以一些更"空间友好"的方式存储这个多边形,它只存储int x,y坐标的序列.如果我用rar压缩这个文件,我的大小比未压缩的小3.5倍.有没有比简单地在序列中存储x,y更好的表示?

压缩应该是无损的.

java compression polygon

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

std :: string和const char*

如果我使用

const char * str = "Hello";
Run Code Online (Sandbox Code Playgroud)

运行时不需要内存分配/解除分配

如果我使用

const std::string str = "Hello";
Run Code Online (Sandbox Code Playgroud)

是否会在字符串类中通过new/malloc进行分配?我可以在集会中找到它,但我不擅长阅读它.

如果回答是"是的,会有malloc/new",为什么?为什么只能在std :: string里面传递给内部const char指针并在需要编辑编辑字符串时进行实际的内存分配?

c++ string memory-management

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

C++ - std :: decay <T>和std :: make_tuple <D> - 无法将参数从'D'转换为'D &&'

我有这个代码:

template <typename T>
void someFunction(){
   typedef std::decay<T>::type D;

   D val = GetValue<D>();
   std::tuple<D> t = std::make_tuple<D>(val);

   //... tuple is stored outside this scope in global variable
}
Run Code Online (Sandbox Code Playgroud)

GetValue<D>()基于从字典返回值上typeid(D),它工作正常,我回到MyDataD-我测试了它,如果我注释掉下一个问题的行,见下面的问题.

如果我编译它,因为T = const MyData &我得到了这个

 error C2664: 'std::tuple<MyData > std::make_tuple<D>(D &&)': cannot convert argument 1 from 'D' to 'D &&'
Run Code Online (Sandbox Code Playgroud)

为什么会产生此错误以及如何删除它?我想在我的元组中只存储非ref值,即使模板T是refd'.

我可以通过使用来编译它std::make_tuple<D>(std::forward<D>(val)),但是它调用我的移动ctor并且我想要复制ctor,因为val在方法结束时被销毁,所以它的内部数据和移动ctor只是移动它们,所以它们就消失了.

c++ templates tuples c++11

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

用相同的透明度绘制重叠线

我大致有以下逻辑:

Bitmap bmp = ....
Pen pen = new Pen(Color.FromArgb(125, 0, 0, 255), 15);
var graphics = Graphics.FromImage(bmp);
graphics.DrawLines(pen, points1);
graphics.DrawLines(pen, points2);
Run Code Online (Sandbox Code Playgroud)

问题是,points1和points2包含一些重叠的线段。

如果我画这条线,则重叠部分的颜色与其余部分不同,这是由于相同线段的混合(首先是1与背景,然后2与已经混合的1与背景)。有没有一种方法可以实现重叠部分与单个不重叠段的颜色相同的效果?

c# graphics gdi+

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

Swift - 将转义闭包传递给 C API 回调

我有我从 Swift 使用的 C API。

在斯威夫特,我有:

enum GetSnapshotResult {
    case success(snapshot: UIImage, String)
    case failure()
}

func getSnapshot(completion: @escaping (GetSnapshotResult) -> Void) {
    CAPIGetSnapshot(nil) { (_) in 
        completion(
            .success(
                snapshot: UIImage(),
                "test"
            )
        )
    }
}
Run Code Online (Sandbox Code Playgroud)

在 C API 中:

void CAPIGetSnapshot(void * ptr, void(*callbackOnFinish)(void *)) {
    //do something in background thread
    //and on its finish, call callbackOnFinish from thread 
    
    callbackOnFinish(ptr);
}
Run Code Online (Sandbox Code Playgroud)

但是,有了这个,我得到:

AC 函数指针不能由捕获上下文的闭包形成

我该如何解决这个问题?

c closures swift

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

从模板化类中删除模板类型

我有这个结构:

template <typename T>
using AllSettings = std::variant<
    A<T>,
    B<T>,
    C<T>,
    D<T>
>;

template typename<T>
void Foo() {
    using SettingClassT = std::variant_alternative_t<0, AllSettings<T>>;

    //....
}
Run Code Online (Sandbox Code Playgroud)

是否有可能在没有<T>从的情况下获得基类SettingClassT?像这样的东西:

template <typename T>
using SettingClassBase = ... somehow remove T from SettingClassT
Run Code Online (Sandbox Code Playgroud)

因为我需要分别调用其他需要基类型和T类型的模板方法。

template <template<class> class Base, typename T>
void Bar() { }
Run Code Online (Sandbox Code Playgroud)

所以我可以打电话:

Bar<SettingClassBase, T>();
Run Code Online (Sandbox Code Playgroud)

c++ templates c++17

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

UITabBarItem和图标大小

我正在使用UITabBarItem.如果我设置图像,它没有正确显示.图像被"缩放",所以我只能看到它的顶部.图像大小为60x60px.

我从xcodes XIB编辑器 - > BarItem - > Image设置图像

它出什么问题了 ?根据Apple Doc的说法,Retina的图像应该是60x60,甚至更大的图像应该自动缩放以适应观看区域.

objective-c uitabbaritem uitabbar

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