小编O'N*_*eil的帖子

我应该如何将NULL传递给va_list函数参数?

我想将NULL传递给以下函数的第4个参数:

bool CCMenuItemToggle::initWithTarget(CCObject* target, SEL_MenuHandler selector, CCMenuItem* item, **va_list args**);
Run Code Online (Sandbox Code Playgroud)

像这样:

CCMenuItemToggle::initWithTarget(this, menu_selector(GOSound::toggleButtonCallback), NULL, NULL);
Run Code Online (Sandbox Code Playgroud)

我在XCode(clang3.1)中构建它时没关系.但是当我将代码移植到android ndk(g ++ 4.7)时,它无法编译:

没有可行的从'int'转换为'va_list'(又名'__builtin_va_list')

我该怎么处理呢?

c++ g++ variadic-functions android-ndk

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

可变参数模板:生成一对相邻元素的元组

我的目标是做一些事情,例如,

pairs<1,2,3,4>()
Run Code Online (Sandbox Code Playgroud)

有退货类型

std::tuple<some_other_type<1,2>, some_other_type<2,3>, some_other_type<3,4>>
Run Code Online (Sandbox Code Playgroud)

我想知道这是否可能与C++模板元编程,以及如何实现它.为了实际生成该值,似乎我可以使用tuple_cat递归地连接到输出,但我发现很难表达返回类型,因为它本身是可变参数并且实际上是模板参数数量的函数.使情况复杂化,如果我去了tuple_cat路由,似乎我也必须重载函数以使元组连接到,并且连接将在运行时发生,而不是编译时.我在野鹅追逐吗?

c++ templates variadic-templates c++11

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

C++可变参数模板类终止

半小时前我发现了可变参数模板参数,现在我完全迷上了.

我有一个基于静态类的抽象,用于微控制器输出引脚.我想将多个输出引脚分组,以便将它们作为一个引脚处理.下面的代码有效,但我想我应该能够在0参数而不是1上结束递归.

template< typename pin, typename... tail_args >
class tee {
public:

   typedef tee< tail_args... > tail;

   static void set( bool b ){
      pin::set( b );
      tail::set( b );   
   }   

};

template< typename pin >
class tee< pin > {
public:

   static void set( bool b ){
      pin::set( b );
   }   

};
Run Code Online (Sandbox Code Playgroud)

我试过这个,但编译器(gcc)似乎没有考虑到它:

template<>
class tee<> : public pin_output {
public:

   static void set( bool b ){}   

};
Run Code Online (Sandbox Code Playgroud)

错误消息很长,但它基本上说没有tee <>.我的T恤<>是否有问题,或者是否有可能结束递归

c++ templates template-meta-programming

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

如何将 Android Oreo(8.0) 自动填充框架应用于 WebView?

https://developer.android.com/about/versions/oreo/android-8.0-changes.html#all-apps

网络表单自动填充

既然 Android 自动填充框架提供了对自动填充功能的内置支持,对于安装在运行 Android 8.0(API 级别 26)的设备上的应用,与 WebView 对象相关的以下方法已更改:

网页设置

  • getSaveFormData() 方法现在返回 false。以前,此方法返回 true。
  • 调用 setSaveFormData() 不再有任何效果。

网络视图数据库

  • 调用 clearFormData() 不再有任何效果。
  • hasFormData() 方法现在返回 false。以前,当表单包含数据时,此方法返回 true。

android autofill webview

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

为什么SFINAE在这里不起作用

我想实现静态检查以找出类型是否可构造:

#include <iostream>

template<typename T>
struct IsConstr
{
    typedef char TrueType;
    typedef struct{char a[2];} FalseType;
    template<typename C>
    static decltype((C(),TrueType())) test(int);
    template<typename C>
    static FalseType test(...);

    enum{value=(sizeof(test<T>(0))==sizeof(TrueType))};
}; 


struct S{private: S();};
int main()
{
    std::cout<<IsConstr<S>::value<<std::endl;
    std::cout<<IsConstr<int>::value<<std::endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

代码无法编译,显示错误

"替换失败.'S :: S()'是私人的".

为什么SFINAE不在这里工作?谢谢.

c++ sfinae

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

为什么不是Math.max(双a,双b)可变参数?

为什么Math.max的实现不具有可变函数

它可以像这样实现:

public class Main {
    public static double max(double... values) {
        double max = Double.NEGATIVE_INFINITY;
        for (double tmp : values) {
            max = max < tmp ? tmp : max;
        }
        return max;
    }

    public static void main(String[] args) {
        // This works fine:
        System.out.println(max(-13, 12, 1337, 9));

        // This doesn't work:
        // System.out.println(Math.max(-13, 12, 1337));
    }
}
Run Code Online (Sandbox Code Playgroud)

是否有任何理由不这样实施?

java variadic-functions

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

如何在ckeditor5中为`a`标签添加"target"属性?

我已经为链接创建了自己的插件.现在我想为a插件生成的标签添加一些其他属性,比如target,rel.

但我无法完成它.这是我的转换器的插件代码.我应该添加哪些转换器,以便a标记可以支持其他属性?

/**
 * @license Copyright (c) 2003-2018, CKSource - Frederico Knabben. All rights reserved.
 * For licensing, see LICENSE.md.
 */

/**
 * @module link/linkediting
 */

import LinkEditing from '@ckeditor/ckeditor5-link/src/linkediting';
import {
    downcastAttributeToElement
} from '@ckeditor/ckeditor5-engine/src/conversion/downcast-converters';
import { upcastElementToAttribute } from '@ckeditor/ckeditor5-engine/src/conversion/upcast-converters';
import LinkCommand from './uclinkcommand';
import UnlinkCommand from './ucunlinkcommand';
import { createLinkElement } from '@ckeditor/ckeditor5-link/src/utils';
import { ensureSafeUrl } from './utils';
import bindTwoStepCaretToAttribute from '@ckeditor/ckeditor5-engine/src/utils/bindtwostepcarettoattribute';

/**
 * The link engine feature. …
Run Code Online (Sandbox Code Playgroud)

ckeditor5

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

可以在可变参数模板中推导出容器类型吗?

在C++ 11/C++ 14中,

template <
   typename T ,
   template <typename...> class Container_t
>
void MyFunc(Container_t<T> &data) { ... }


template <typename T>
void MyFunc2( T v ) { ... }


int main()
{
   std::vector<char> v;

   MyFunc<char, std::vector>(v);     // OK
   MyFunc(v);                        // error

   int i;

   MyFunc2<int>(i);                  // OK
   MyFunc2(i);                       // OK
}
Run Code Online (Sandbox Code Playgroud)

我收到了一个错误MyFunc(v).

是否有可能让编译器找出传递给可变参数模板函数的容器类型?我发现没有问题,就像普通模板中的普通类型一样.

如果我需要更改v的类型,是否必须修复对MyFunc的所有调用?

编译器:Microsoft Visual C++ 2015(v140)

c++ templates variadic-templates c++11

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

检查模板类型T是否是C++ 17中可变参数包的一部分

我想检查一个类型T也是参数包的一部分Ts.有些解决方案可以在C++ 14中实现,但如果在C++中可以简化这一点,我就会徘徊17.如果TTs编译器中找不到应该停止(static_assertion应该失败).

template<typename... Ts>
class A
{
  template<typename T>
  void action() {
    // check that T is also in Ts (static_assertion)
  }
}
Run Code Online (Sandbox Code Playgroud)

c++ variadic-templates c++17

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

是否有相当于 _aligned_realloc 的 linux

_aligned_realloc的 linux 等价物吗?

我想使用 realloc 所以我不必每次调整数据时都对数据进行 memcpy。我被 mmap 卡住了吗?我只使用了一次 mmap 是否有推荐的方法来实现将调整几次大小的内存?我假设我不能将 mmap 与aligned_alloc 混合使用,并且我必须在第一次调整大小时执行memcpy?(或始终使用 mmap)

下面的 realloc 并不总是对齐。我在(64位)linux下使用gcc和clang进行了测试

#include<cstdlib>
#include<cstdio>
#define ALIGNSIZE 64
int main()
{
    for(int i = 0; i<10; i++)
    {
        void *p = aligned_alloc(ALIGNSIZE, 4096);
        void *p2 = realloc(p, 4096+2048); //This doesn't always align
        //void *p3 = aligned_alloc(ALIGNSIZE, 4096/24); //Doesn't need this line to make it unaligned. 

        if (((long)p & (ALIGNSIZE-1)) != 0 || ((long)p2 & (ALIGNSIZE-1)) != 0)
            printf("%d %d %d\n", i, ((long)p & …
Run Code Online (Sandbox Code Playgroud)

c c++ linux

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