小编Oli*_*ree的帖子

SFINAE只有在可能的情况下才有集体成员

我已经创建了一个类型安全的ID类,但是现在我想支持operator ++,如果底层类型也有它.从这个这个回答我已经提出了两个替代方案,但它们都在用AId实例化时失败:

template<typename T, typename TID = unsigned int>
struct AId {
  typedef AId<T, TID> type;
  typedef T handled_type;
  typedef TID value_type;

private:
  value_type id;

  template<typename _T> struct IsIncrementable
  {
    template<typename _U> using rm_ref = typename std::remove_reference<_U>::type;
    typedef char (&yes)[1];
    typedef char (&no)[2];
    template<class _U>
    static yes test(_U *data, typename std::enable_if<
                      std::is_same<_U, rm_ref<decltype(++(*data))>>::value
                    >::type * = 0);
    static no test(...);
    static const bool value = sizeof(yes) == sizeof(test((rm_ref<_T> *)0));
  };

public:
  explicit AId(const value_type &id) : …
Run Code Online (Sandbox Code Playgroud)

c++ templates sfinae c++11

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

C++ 运算符 == 和隐式转换解析

如果我有一个struct A定义为:

struct A {
    const char *data;
    operator const char * () const { return data; }
    friend bool operator== (const A &s1, const char *s2)
    { return /* typical string comparison result */; }
};
Run Code Online (Sandbox Code Playgroud)

而我写的A{"hello"} == "test2"A::operator==叫什么?标准中的内容是什么(为什么不A隐式转换为const char *?)

怎么样"test2" == A{"hello"}A在这种情况下是否已转换?

编辑:如果struct A也有成员呢:

friend bool operator== (const char *s1, const A &s2)
Run Code Online (Sandbox Code Playgroud)

c++ operator-overloading overload-resolution implicit-conversion

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

建立+链接Android Studio中的libpng和Windows上的CMake

我正在尝试在Windows 10上使用Android Studio和CMake启动本机应用程序项目,但我仍然坚持使用libpng.

对于初学者来说,这是我第一次看到CMakeLists.txt文件.我花了一天找出target_link_libraries(native-activity ... png)不能target_link_libraries(png native-activity ...)因为所有的错误信息大约未能由于从工具链遗漏的需求未被创建的文件和命令(为什么是在列表的末尾基本错误?不冷静!).

在最终设法在项目中包含libpng后,我现在得到一个构建错误:

Error:Execution failed for task ':app:externalNativeBuildDebug'.
...
error: unknown target CPU 'armv5te'
CMake Error at scripts/genout.cmake:78 (message):
    Failed to generate
    C:/APP_PATH/app/libpng-1.6.28/build/scripts/symbols.out.tf1
ninja: build stopped: subcommand failed.
Run Code Online (Sandbox Code Playgroud)

我递归地grep了我的项目,.android,.AndroidStudio2.2目录,以及文件名,除了genout.cmake之外,没有发现armv5te.我的abiFilters系列是abiFilters 'x86'.

如何构建libpng链接到我的原生应用程序?此外,在Android Studio中,它显示项目现在包含libpng源文件(不少于9个项目专用于它!).有没有办法删除它?

这是我的CMakeLists.txt:

cmake_minimum_required(VERSION 3.4.1)

# build native_app_glue as a static lib
add_library(app-glue STATIC ${ANDROID_NDK}/sources/android/native_app_glue/android_native_app_glue.c)

set(png_src_dir ../../../../libpng-1.6.28)
set(PNG_STATIC ON)
add_subdirectory(${png_src_dir} ${png_src_dir}/build)

# now build app's shared lib
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++14")

add_library(native-activity SHARED
            main.cpp logger.cpp logger.h game.cpp game.h
            shaders.cpp …
Run Code Online (Sandbox Code Playgroud)

android cmake android-studio

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