/
niceSOFT
/
swig
Обзор
Документация
Войти
/
niceSOFT
/
swig
Код
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
Examples/test-suite/java/cpp17_using_pack_expansion_runme.java
63 строки
3 KB
William S Fulton
C++17: parse and support pack expansion in a using-declaration
30 май 2026, 02:11
30 май 2026, 02:11
7e282b8
Код
Авторство
О чём код?
import cpp17_using_pack_expansion.*; public class cpp17_using_pack_expansion_runme { static { try { System.loadLibrary("cpp17_using_pack_expansion"); } catch (UnsatisfiedLinkError e) { System.err.println("Native code library failed to load. See the chapter on Dynamic Linking Problems in the SWIG Java documentation for help.\n" + e); System.exit(1); } } public static void main(String argv[]) { // Direct call via %template proxy (C++17 pack expansion in a using-declaration). OverloadedIntDouble ov = new OverloadedIntDouble(); if (!ov.call(7).equals("Int:7")) throw new RuntimeException("ov.call(7)"); if (!ov.call(2.5).equals("Double:2.500000")) throw new RuntimeException("ov.call(2.5)"); // std::visit idiom using helper functions. if (!cpp17_using_pack_expansion.visit_functors_int(7).equals("Int:7")) throw new RuntimeException("visit_functors_int(7)"); if (!cpp17_using_pack_expansion.visit_functors_double(2.5).equals("Double:2.500000")) throw new RuntimeException("visit_functors_double(2.5)"); // Pack expansion in a using-declaration with a nested qualifier 'Base<Ts>::operator()...;'. MixedIntDouble mx = new MixedIntDouble(); if (!mx.call(7).equals("T:7")) throw new RuntimeException("mx.call(7)"); if (!mx.call(2.5).equals("T:2.500000")) throw new RuntimeException("mx.call(2.5)"); // Empty pack: the using-declaration introduces no names, so the proxy class is constructible // but has no inherited call method. OverloadedEmpty emptyOverloaded = new OverloadedEmpty(); MixedEmpty emptyMixed = new MixedEmpty(); for (java.lang.reflect.Method m : OverloadedEmpty.class.getDeclaredMethods()) { if (m.getName().equals("call")) throw new RuntimeException("OverloadedEmpty unexpectedly exposes call()"); } for (java.lang.reflect.Method m : MixedEmpty.class.getDeclaredMethods()) { if (m.getName().equals("call")) throw new RuntimeException("MixedEmpty unexpectedly exposes call()"); } emptyOverloaded.delete(); emptyMixed.delete(); // Empty pack with member methods either side of the using-decl: the using-decl is removed // and before_using()/after_using() remain intact in the proxy. WithMembersEmpty wm = new WithMembersEmpty(); if (!wm.before_using().equals("before")) throw new RuntimeException("wm.before_using()"); if (!wm.after_using().equals("after")) throw new RuntimeException("wm.after_using()"); for (java.lang.reflect.Method m : WithMembersEmpty.class.getDeclaredMethods()) { if (m.getName().equals("call")) throw new RuntimeException("WithMembersEmpty unexpectedly exposes call()"); } wm.delete(); } }